gpt4 book ai didi

c# - ASP.NET Identity 不会根据同一请求更新身份信息

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

我正在使用 AngularJS 和 ASP.NET Identity 2 开发单页应用程序。我让用户登录并设置 cookie;但是,当我在同一个请求中检查用户的身份时,它显示为空白并且 IsAuthenticated 为 false。但是,这些会在后续请求中填充。我希望无论用户是否在同一个请求上登录,都可以发送回 UI。这可能吗?

按要求编写代码(AngularJS 将 AJAX 发送到 WebAPI Controller 登录方法中)

[HttpPost]
[AllowAnonymous]
[Route("Login")]
public async Task<IHttpActionResult> Login(LoginModel loginModel)
{
var result = await _securityService.Login(loginModel.UserName, loginModel.Password);
if (!result)
{
ModelState.AddModelError("errorMessage", "Invalid username or password.");
return BadRequest(ModelState);
}
return Ok();
}

public async Task<bool> Login(string userName, string password, bool persistCookie = false)
{
var user = await _userManager.FindAsync(userName, password);
if (user != null)
await SignInAsync(user, persistCookie);
else
return false;

return true;
}

private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
_authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
_authenticationManager.SignIn(new AuthenticationProperties() {IsPersistent = isPersistent}, await CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie));
}

public Task<ClaimsIdentity> CreateIdentity(ApplicationUser user, string authenticationType)
{
return _userManager.CreateIdentityAsync(user, authenticationType);
}

最佳答案

在下一次请求之前,您不会获得登录身份,因为对 SignIn 的调用会导致在响应中设置 cookie。该 cookie 将在后续请求中变成身份,但现在更改您当前请求的身份为时已晚。

关于c# - ASP.NET Identity 不会根据同一请求更新身份信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661012/

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