null引用siplestype中的索赔策略异常,将索赔作为null



嗨,我正在尝试身份核心,

我需要获取已登录的用户的详细信息。

我正在尝试以下内容:

var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
   if (result.Succeeded)
     {
      string userRole=_signInManager.Context.User.FindFirst(ClaimTypes.Role).Value;
    }

获得用户角色

时,我会得到零参考异常

但是,我在另一个控制器中尝试了同样的登录页面,并且它正在工作。

我在做什么错?谢谢:)

此代码无法正常工作,因为调用_signInManager.PasswordSignInAsync仅生成并为用户设置身份验证cookie,并且现在不登录用户,因此此处没有记录的用户这就是_signInManager.Context.User返回null的原因。仅在下一个请求中将用户登录,该请求包含身份验证cookie。因此,在登录的一般代码中看起来像

_signInManager.PasswordSignInAsync(...);
if (result.Succeeded)
{
    return Redirect(...);
}

但是,如果您想在登录后立即获取用户信息,则可以像以下

if (result.Succeeded)
{
    var user = await _signInManager.UserManager.FindByEmailAsync(Input.Email);
    IList<Claim> userClaims = await _signInManager.UserManager.GetClaimsAsync(user);
    string userRole = userClaims.First(c => c.Type == ClaimTypes.Role).Value;
    //...
}

,或者,如果您只想获得角色,则可以使用此代码

var user = await _signInManager.UserManager.FindByEmailAsync(Input.Email);
IList<string> roles = await _signInManager.UserManager.GetRolesAsync(user);
string userRole = roles.First();

相关内容

  • 没有找到相关文章