我想访问当前登录 ASP.NET Core 6 的用户的 userId。我尝试了很多不同的方法,但所有方法似乎都有一个问题:user 始终为 null。
我试过这个
string userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
我也尝试过这个:
var userId = _userManager.GetUserId(User);
var user = await _userManager.FindByIdAsync(userId);
还有很多其他的事情:(.
我的控制器的一部分:
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly ApplicationDbContext _context;
private readonly SignInManager<ApplicationUser> _signInManager;
public UsersController(UserManager<ApplicationUser> userManager, ApplicationDbContext context, SignInManager<ApplicationUser> signInManager)
{
_userManager = userManager;
_context = context;
_signInManager = signInManager;
}
}
如果你想使用
User.FindFirstValue(ClaimTypes.NameIdentifier)
方法获取id,你需要确保id在claims中。
var user = await _userManager.FindByNameAsync(loginUserDto.UserName);
var claims = new[]
{
new Claim(ClaimTypes.Name, loginUserDto.UserName),
new Claim(ClaimTypes.NameIdentifier, user.Id)
};
或者
您可以使用
var result = await _userManager.FindByNameAsync(userName);
先获取当前用户,然后获取 id。