gpt4 book ai didi

c# - 用户使用 'Remember me' 注销

转载 作者:行者123 更新时间:2023-11-30 17:45:38 38 4
gpt4 key购买 nike

我似乎无法理解 Identity 2.0 和 cookie 的工作方式。 ASP.NET MVC 5.

我想要的:如果用户登录并选中“记住我”复选框,我不希望他永远注销。但是会发生什么:用户在特定时间跨度后注销。

如果用户在时间跨度之前关闭浏览器,“记住我”功能就会起作用。 (当他重新打开网站时,他仍然处于登录状态。)

这是我的登录代码:

 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}

// Require the user to have confirmed their email before they can log on.
var user = await UserManager.FindByNameAsync(model.Email);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
await SendEmailConfirmationTokenAsync(user.Id);

ModelState.AddModelError("", "Gelieve eerst je e-mailadres te bevestigen.");
return View(model);
}
}

// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Ongeldige aanmeldpoging.");
return View(model);
}
}

这是 Startup.Auth 中的代码:

 app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromMinutes(5),
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, int>(
validateInterval: TimeSpan.FromMinutes(10),
regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager),
getUserIdCallback: (id) => (id.GetUserId<int>()))
}
});

所以我希望用户不会在 5 分钟后注销,因为在 PasswordSignInAsync 函数中设置了 isPersistent 标志。

感谢您的帮助。

最佳答案

这是一个 known bug .

可以通过将 SecurityStampValidator.OnValidateIdentity 替换为您自己的代码来修复 - 当重新生成 cookie 时,它​​忘记在新 cookie 中添加“RememberMe”属性,这使得新 cookie不执着。

我认为这个问题已经在 v2.2 中解决了,但是这个版本还没有发布。遗憾的是,我现在找不到原始的错误报告。

关于c# - 用户使用 'Remember me' 注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27245098/

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