gpt4 book ai didi

c# - Asp.net mvc identity SecurityStamp 无处不在注销

转载 作者:太空狗 更新时间:2023-10-29 21:43:41 26 4
gpt4 key购买 nike

我想做的是限制用户 ID 一次只能登录一台设备。例如,用户 ID“abc”登录到他们的计算机。用户 ID“abc”现在尝试从他们的手机登录。我想要发生的是终止他们计算机上的 session 。

为此,我正在使用 Asp.net mvc 身份成员身份并使用 SecurityStamp。这是我在帐户/登录操作中的代码:

    [HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
var user = UserManager.FindByEmail(model.Email);
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
await UserManager.UpdateSecurityStampAsync(user.Id);

根据 UpdateSecurityStampAsync 方法文档说:为用户生成一个新的安全标记,用于 SignOutEverywhere 功能。但它不起作用。

最佳答案

如果您想在其他设备上启用 cookie 的即时失效,那么每个请求都必须访问数据库以验证 cookie。为此,您需要在 Auth.Config.cs 中配置 cookie 失效并将 validateInterval 设置为 0:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
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<UserManager, ApplicationUser>(
validateInterval: TimeSpan.FromSeconds(0),
regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
);

关于c# - Asp.net mvc identity SecurityStamp 无处不在注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36151800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com