繁体   English   中英

为什么UserManager.GetUserAsync在使用JWT时返回null?

[英]Why does UserManager.GetUserAsync return null when using JWT?

我的.NET CORE 2.1 web api存在一些问题。 我使用Identity框架和JWT-tokens进行身份验证,但每当我尝试在控制器中获取当前用户时,我都会得到一个空引用错误。

从我能看到的所有设置看起来都很好,我试图手动设置Identity的密钥,但仍然得到相同的错误。 有任何想法吗?

控制器:

        var user = await _userManager.GetUserAsync(User);

Startup.cs:

    public void ConfigureServices(IServiceCollection services)
    {
      services.AddIdentity<LoginUser, IdentityRole>(options => {
            options.ClaimsIdentity.UserIdClaimType = 
            ClaimTypes.NameIdentifier;
            })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
    }

令牌生成中的声明:

        var claims = new List<Claim>
        {
            new Claim(JwtRegisteredClaimNames.Sub, user.Id),
            new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
            new Claim(JwtRegisteredClaimNames.Email, email),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
        };

无法真正解释为什么会发生这种情况,我想这是因为用户没有真正登录,因为JWT是无状态的。

但是,由于以下代码段,我成功获得了当前用户:

private async Task<AppUser> GetUser()
        => await _userManager.FindByIdAsync(User.Claims.FirstOrDefault(c => string.Equals(c.Type, Constants.Strings.JwtClaimIdentifiers.Id, StringComparison.InvariantCultureIgnoreCase))?.Value);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM