gpt4 book ai didi

c# - 如何在 ASP .NET CORE Identity 中通过 SignInManager 登录后获取用户声明?

转载 作者:行者123 更新时间:2023-12-04 13:21:21 25 4
gpt4 key购买 nike

我有一个 ASP .NET Core 2.0 项目,我在其中使用 Microsoft 的 Identity 框架进行身份验证/授权。我有以下方法根据用户名和密码验证用户并返回声明计数。我尝试登录的用户在数据库中找到,但它的声明在此处返回 0 - 在数据库中确实存在针对用户的声明(参见图像 enter image description here)。

    [HttpPost("login")]
public async Task<object> Login([FromBody] LoginDto model)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);

if (result.Succeeded)
{
var appUser = _signInManager.UserManager.Users.SingleOrDefault(r => r.Email == model.Email);
var userClaims = await _signInManager.UserManager.GetClaimsAsync(appUser); // this is returning 0 claims

return Ok(HttpContext.User.Claims.Count());
}

throw new ApplicationException("INVALID_LOGIN_ATTEMPT");
}

关于可能重复问题的答案并没有解决我的问题。

最佳答案

对于 UserManager.GetClaimsAsync ,它将从 AspNetUserClaims 查询 claim 而不是 AspNetUserRoles .你可以通过 GetClaimsAsync 来检查这个

return await UserClaims.Where(uc => uc.UserId.Equals(user.Id)).Select(c => c.ToClaim()).ToListAsync(cancellationToken);

一般来说,我们可以试试 HttpContext.User.Claims检索用户的声明,但它适用于子请求而不是当前登录请求。如果你移动这个 HttpContext.User.ClaimsHome Index action,它将返回预期的结果。

用于在 Login 中获得 claim , 我建议你试试
                var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(appUser);
var claims = claimsPrincipal.Claims.ToList();

关于c# - 如何在 ASP .NET CORE Identity 中通过 SignInManager 登录后获取用户声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52351876/

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