User.identity.name is null on ASP.net core api after authentication

Viewed 775

I'm totally new to asp.net, and I'm trying to do a simple rest api. i need to get the username of the current logged in user. I have User.Identity.IsAuthenticated is true, but User.Identity.Name is null. I'm using jwt tokens for authentication.

here is my login method

        [HttpPost]
        public async Task<IActionResult> Login([FromBody] LoginData jsonUser) {
            IdentityUser claimedUser;
            try {
                claimedUser = _userManager.Users.First(
                    user => user.Email == jsonUser.username || user.UserName == jsonUser.username);
            } catch (Exception e) {
                return NotFound("No user with this username : " + e);
            }


            bool isPasswordCorrect = await _userManager.CheckPasswordAsync(claimedUser, jsonUser.Password);
            return isPasswordCorrect
                ? Ok(GenerateJwtToken(claimedUser.Email, claimedUser))
                : StatusCode(401, "bad login or password");
        }


        //Génération du token JWT
        private string GenerateJwtToken(string email, IdentityUser user) {
            var claims = new List<Claim> {
                new Claim(JwtRegisteredClaimNames.Sub, email),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(ClaimTypes.NameIdentifier, user.Id),
                new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName),
                new Claim(JwtRegisteredClaimNames.GivenName, user.UserName)
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtKey"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var expires = DateTime.Now.AddDays(Convert.ToDouble(_configuration["JwtExpireDays"]));

            var token = new JwtSecurityToken(
                _configuration["JwtIssuer"],
                _configuration["JwtIssuer"],
                claims,
                expires: expires,
                signingCredentials: creds
            );

            return new JwtSecurityTokenHandler().WriteToken(token);
        }

How can I get the current username ?

0 Answers
Related