public async Task <ActionResult <UserDto> > Register(RegisterDto registerDto) { if (await UserExists(registerDto.Username)) { return(BadRequest("User name is already taken")); } // Using the hash algorithm for secure saving the pet username (identity) and password into database. using var hmac = new HMACSHA512(); var petUser = new PetUserEntity { Name = registerDto.Username.ToLower(), PasswordHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(registerDto.Password)), PasswordSault = hmac.Key, }; dbContext.PetUsers.Add(petUser); await dbContext.SaveChangesAsync(); return(new UserDto { Username = petUser.Name, Token = tokenService.CreateToken(petUser), }); }
/// <inheritdoc /> public string CreateToken(PetUserEntity user) { var claims = new List <Claim> { new Claim(JwtRegisteredClaimNames.NameId, user.Name), }; var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(claims), Expires = DateTime.UtcNow.AddDays(7), SigningCredentials = credentials, }; var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateToken(tokenDescriptor); return(tokenHandler.WriteToken(token)); }