我的.NETCore2.1WebAPI有一些问题。我使用identity framework和jwt令牌进行身份验证,但是每当我试图在控制器中获取当前用户时,就会得到一个空引用错误。
从我所看到的来看,所有设置看起来都很好,我已经尝试手动设置identity的键,但仍然会出现相同的错误。有什么想法吗?
控制器:

        var user = await _userManager.GetUserAsync(User);

启动.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);

10-07 19:32
查看更多