我正在用户登录时创建声明身份,并使用.Net Core API将令牌字符串返回到最前面。 用户登录后如何更新用户声明身份,如languageId? 请在下面的代码中找到用户登录信息以及我如何创建声明
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody]LoginDTO loginDTO)
{
try
{
loginDTO.UserName = loginDTO.UserName.ToLower();
Users user = await _db.UserLogin(loginDTO.UserName, loginDTO.Password);
if (user == null)
{
throw new Exception("Wrong Username or Password");
}
string userToken = GenerateJSONWebToken(user);
UserDTO userModel = new UserDTO
{
UserId = user.UserId,
UserName = user.UserName,
IsActive = user.IsActive,
IsAdmin = user.IsAdmin,
LanguageId = user.LanguageId,
LastActivityDate = user.LastActivityDate,
LastLoginDate = user.LastLoginDate,
tokenString = userToken
};
return Ok(new { userModel });
}
catch (Exception e)
{
throw new Exception(e.ToString());
}
}
private string GenerateJSONWebToken(Users userInfo)
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new[] {
new Claim(JwtRegisteredClaimNames.Sub, userInfo.UserName),
new Claim(JwtRegisteredClaimNames.NameId, userInfo.UserId.ToString()),
new Claim("RoleId",userInfo.RoleId.ToString()),
new Claim("UserId", userInfo.UserId.ToString()),
new Claim("LanguageId", userInfo.LanguageId.ToString()),
};
var token = new JwtSecurityToken(_config["Jwt:Issuer"],
_config["Jwt:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(120),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
}