.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();
}
答案 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);