2.9: Adding Login Functionality
Add UserForLogin DTO
public class UserForLogin
{
public string Username { get; set; }
public string Password { get; set; }
}Adding Login Method to Controller
[HttpPost("Login")]
public async Task<IActionResult> Login([FromBody] UserForLogin userForLogin)
{
var userFromDb = await _authService.Login(userForLogin.Username.ToLower(), userForLogin.Password);
if (userFromDb == null)
return Unauthorized();
// GENERATE TOKEN
var tokenHandler = new JwtSecurityTokenHandler();
var key = new byte[0]; // we'll add this after adding DI later
var tokenDescriptor = new SecurityTokenDescriptor // Describes information we want to include in our token
{
Subject = new ClaimsIdentity(new Claim[] // Payload
{
new Claim(ClaimTypes.NameIdentifier, userFromDb.Id.ToString()),
new Claim(ClaimTypes.Name, userFromDb.Username)
}),
Expires = DateTime.Now.AddDays(1),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
SecurityAlgorithms.HmacSha512Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor); // Create token
var tokenString = tokenHandler.WriteToken(token); // to string (from byte[])
return Ok( new { tokenString }); // Return 200, passing along tokenString
}Register Authentication and Add Middleware in Startup Class
Adding Key to AuthController and Login() Method
Last updated