ana*_*and 15 asp.net authentication cookies asp.net-mvc iis-8.5
当用户填写详细信息并单击Reset Password按钮时.调用以下控制器:
public ActionResult ResetPassword(ResetPassword model)
{
...
return RedirectToAction("Logout");
}
Run Code Online (Sandbox Code Playgroud)
当用户更改密码时,他们会Logged Out从浏览器中获取密码.但是,如果他们同时登录到另一个浏览器,他们仍然在另一个浏览器上登录.
我想在用户更改密码时从登录的所有浏览器中注销用户.
Chr*_*ris 15
我看到你正在使用ASP.NET身份2.你正在尝试做的事情已经内置.你需要做的就是更改SecurityStamp,所有以前的身份验证cookie都不再有效.
更改密码后,还需要更改SecurityStamp:
await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
await UserManager.UpdateSecurityStampAsync(User.Identity.GetUserId());
Run Code Online (Sandbox Code Playgroud)
如果您希望用户保持登录状态,则必须重新颁发新的身份验证cookie(登录):
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
Run Code Online (Sandbox Code Playgroud)
否则,还将注销启动密码更改的用户/会话.
要立即注销所有其他会话,您需要降低配置中的检查间隔:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromSeconds(1),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
Run Code Online (Sandbox Code Playgroud)
重现步骤:
validateInterval: TimeSpan.FromMinutes(30)为validateInterval: TimeSpan.FromSeconds(1)UserManager.UpdateSecurityStampAsync方法调用.所以我回到家,决定整理一些代码。给我看看代码!
我将使用处理程序,因此验证总是在用户首次访问应用程序时完成,并且每次操作方法访问都在一个地方完成。
这个想法是,当用户重设密码时,应用程序会记录该用户已重设密码,并且首次未登录并注销该用户。
user.HasResetPassword = true;
user.IsFirstLoginAfterPasswordReset = false;
Run Code Online (Sandbox Code Playgroud)
当用户登录时,应用程序将验证用户先前是否重置了密码,并且现在是第一次登录。如果这些语句有效,则应用程序将更新其记录,以表示您尚未重置密码,并且您不是第一次登录。
步骤1
向ApplicationUser模型添加两个属性
第2步
使用以下实现在Models文件夹中添加一个AuthHandler.cs类。在此阶段,您将验证用户是否已重设密码,并且自重设密码以来首次未登录。如果是这样,请将用户重定向到登录名。
第三步
在RouteConfig.cs中,调用AuthHandler,以便为您的应用程序的每个传入的HTTP请求调用它。

第四步
在ResetPassword方法中,添加以下实现。在此步骤中,当用户重设密码时,将属性更新为,即他们已重设密码并且没有首次登录。请注意,重设密码时,用户也会被明确注销。
第5步
在登录方法中,添加以下实现。在此步骤中,如果用户成功登录,请验证其密码是否已重置并且首次登录为假。如果满足所有条件,请更新数据库中的属性,以便这些属性处于准备状态,以备将来用户重置密码时使用。这样的循环确定并更新了密码重置状态,并在重置密码后首次登录。
最后
您的AspnetUsers表应如下所示
评论
这就是我的处理方式。我尚未对其进行测试,因此如果遇到异常,您可能需要对其进行修改。还用硬编码显示了解决问题的方法。
| 归档时间: |
|
| 查看次数: |
5346 次 |
| 最近记录: |