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

时间:2018-08-20 20:25:53

标签: c# .net asp.net-core .net-core jwt

.NET CORE 2.1 Web API出现一些问题。我使用Identity框架和JWT令牌进行身份验证,但是每当我尝试在控制器中获取当前用户时,都会收到null引用错误。

从我所见,所有设置看起来都不错,并且我尝试手动设置Identity的密钥,但仍然遇到相同的错误。有什么想法吗?

控制器:

=

Startup.cs:

        var user = await _userManager.GetUserAsync(User);

代币生成方面的主张:

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

1 个答案:

答案 0 :(得分:2)

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

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

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