gpt4 book ai didi

c# - 如何在 ASP.NET MVC 上获取 session IsPersistent?

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

我有一个使用 ASP.NET Identity 的 ASP.NET MVC 5.0 项目。当用户登录时,我使用此功能通过系统跟踪用户。

SignInManager.SignIn(user,IsPersistent,false)

在用户配置文件中,我可以更改 UserName,之后我需要自动重新登录用户以保持用户跟踪。我注销用户并使用此功能登录,但我在哪里可以获得当前 session 的 IsPersistent 属性?

我可以在每次登录后将 IsPersistent 存储在数据库的 User 表中,但我认为这不是最佳解决方案。

最佳答案

我已经更改了 AccountController 的登录操作中的登录代码以满足您的要求。我已经注释掉了 ASP.NET Identity 默认登录机制。

现在这段代码要做的是首先找到用户,然后检查输入的密码是否与用户的密码匹配。一旦密码匹配,它就会向用户添加虚假声明以存储持久状态并登录用户。

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

SignInStatus result = SignInStatus.Failure;

var user = UserManager.FindByEmail(model.Email);
if (user != null)
{
var isPasswordOk = UserManager.CheckPassword(user, model.Password);
if (isPasswordOk)
{
user.Claims.Add(new IdentityUserClaim() { ClaimType = "IsPersistent", ClaimValue = model.RememberMe.ToString() });
await SignInManager.SignInAsync(user, model.RememberMe, false);

result = SignInStatus.Success;
}
}

// 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: false);

switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);

case SignInStatus.LockedOut:
return View("Lockout");

case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });

case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}

用户登录后,您可以使用以下代码检查用户是否持久。

if (User.Identity.IsAuthenticated)
{
Claim claim = ((ClaimsIdentity)User.Identity).FindFirst("IsPersistent");
bool IsPersistent = claim != null ? Convert.ToBoolean(claim.Value) : false;
}

希望这能解决您的问题。

关于c# - 如何在 ASP.NET MVC 上获取 session IsPersistent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40341591/

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