Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止在MVC 3 Web应用程序中取消密码更改过程_C#_Asp.net Mvc 3_Visual Studio 2010_Authentication_Security - Fatal编程技术网

C# 防止在MVC 3 Web应用程序中取消密码更改过程

C# 防止在MVC 3 Web应用程序中取消密码更改过程,c#,asp.net-mvc-3,visual-studio-2010,authentication,security,C#,Asp.net Mvc 3,Visual Studio 2010,Authentication,Security,这是我的问题。我的应用程序有登录页面、密码重置页面和个人资料页面。没有身份验证,密码重置页面和配置文件页面无法访问 我已使用[Authorize]执行配置文件操作和密码重置操作 在我的应用程序中,我的用户密码在30天后过期。所以当用户登录并且密码过期时,我会重定向用户以更改密码页面。由于用户已经通过身份验证,用户可以进入配置文件页面键入url(例如:www.mywebsite.com/Profile/View)。这是一个漏洞 我不希望用户取消密码更改过程。我想强制用户更改密码 如何实现这一点?在

这是我的问题。我的应用程序有登录页面、密码重置页面和个人资料页面。没有身份验证,密码重置页面和配置文件页面无法访问

我已使用
[Authorize]
执行配置文件操作和密码重置操作

在我的应用程序中,我的用户密码在30天后过期。所以当用户登录并且密码过期时,我会重定向用户以更改密码页面。由于用户已经通过身份验证,用户可以进入配置文件页面键入url(例如:www.mywebsite.com/Profile/View)。这是一个漏洞

我不希望用户取消密码更改过程。我想强制用户更改密码


如何实现这一点?

在user/passowrd表中有另一个布尔标志列,用于指示用户在密码过期后是否重置了密码。因此,每当密码过期时,将该记录的此列值设置为
false
,当用户根据您的过程真正更改密码时,将该值设置为
true
。现在,当用户尝试访问
视图
操作方法(或任何其他操作方法/控制器)时,可以检查此列值。您可以将此检查作为自定义操作筛选器编写,并根据需要将其应用于操作方法/控制器

您也可以使用
PasswordLastUpdated
datetime列来代替上述布尔标志。在这种情况下,您需要检查该值(PasswordLastUpdate)是在过期进程中记录的日期时间之前还是之后。(
DateExpired
column value)


创建自定义操作筛选器的示例可用。

在用户/passowrd表中有另一个布尔标志列,以指示用户是否在密码过期后重置了密码。因此,每当密码过期时,将该记录的此列值设置为
false
,当用户根据您的过程真正更改密码时,将该值设置为
true
。现在,当用户尝试访问
视图
操作方法(或任何其他操作方法/控制器)时,可以检查此列值。您可以将此检查作为自定义操作筛选器编写,并根据需要将其应用于操作方法/控制器

您也可以使用
PasswordLastUpdated
datetime列来代替上述布尔标志。在这种情况下,您需要检查该值(PasswordLastUpdate)是在过期进程中记录的日期时间之前还是之后。(
DateExpired
column value)


创建自定义操作筛选器的示例可用。

是的,我已经有了这两列。我可以在每个视图中检查这种情况。但我认为这不是一个好的做法。如何编写自定义操作属性?@yohan.jayarathna:不要在视图中编写此类代码。正如我所提到的,您必须编写一个action属性,并将其应用于您的action方法/控制器(以便所有action方法都进行该检查)是的,我已经有了这两个列。我可以在每个视图中检查这种情况。但我认为这不是一个好的做法。如何编写自定义操作属性?@yohan.jayarathna:不要在视图中编写此类代码。正如我所提到的,您必须编写一个action属性,并将其应用于您的action方法/控制器(以便所有action方法都具有该检查)