在.Net Core和angular 6中登录后如何为用户更新声明身份?

时间:2019-05-04 16:39:18

标签: .net asp.net-core angular6

我正在用户登录时创建声明身份,并使用.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);
    }

0 个答案:

没有答案