Generate JWT login API
unknown
csharp
4 years ago
1.7 kB
17
Indexable
[AllowAnonymous]
[HttpPost("login")]
public async Task<IActionResult> Login(LoginModel model)
{
IdentityUser user = await userManager.FindByEmailAsync(model.Email);
if (user is not null)
{
if (await userManager.CheckPasswordAsync(user, model.Password))
{
List<string> userRoles = (List<string>)await userManager.GetRolesAsync(user);
List<Claim> authClaims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Id),
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.Email, user.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
foreach (string userRole in userRoles)
{
authClaims.Add(new Claim(ClaimTypes.Role, userRole));
}
SymmetricSecurityKey authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["JWT:Secret"]));
JwtSecurityToken token = new JwtSecurityToken(
claims: authClaims,
issuer: configuration["JWT:ValidIssuer"],
audience: configuration["JWT:ValidAudience"],
signingCredentials: new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256),
expires: model.RememberMe ? DateTime.Now.AddDays(365) : DateTime.Now.AddDays(1)
);
return Ok(new JwtSecurityTokenHandler().WriteToken(token));
}
else
{
return Unauthorized("Adgangskoden var forkert.");
}
}
return Unauthorized("Emailen findes ikke i systemet.");
}Editor is loading...