feat(auth): used FastEndpoint facilities instead of custom solution

This commit is contained in:
2026-02-06 01:06:16 -05:00
parent 19e2c22111
commit 789e55e79d

View File

@@ -2,6 +2,7 @@ using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims; using System.Security.Claims;
using System.Text; using System.Text;
using FastEndpoints; using FastEndpoints;
using FastEndpoints.Security;
using FluentValidation; using FluentValidation;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@@ -58,26 +59,24 @@ public class LoginEndpoint(AppDbContext db, IOptions<JwtSettings> jwtSettings)
Logger.LogInformation("User logged in: {Email}", normalizedEmail); Logger.LogInformation("User logged in: {Email}", normalizedEmail);
var expiresAt = DateTime.UtcNow.AddMinutes(_jwtSettings.ExpirationMinutes); var expiresAt = DateTime.UtcNow.AddMinutes(_jwtSettings.ExpirationMinutes);
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.Secret));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var claims = new[] var jwtToken = JwtBearer.CreateToken(o =>
{ {
o.SigningKey = _jwtSettings.Secret;
o.Issuer = _jwtSettings.Issuer;
o.Audience = _jwtSettings.Audience;
o.ExpireAt = expiresAt;
//o.User.Roles.Add("Manager", "Auditor");
o.User.Claims.Add(
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()), new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.Email, user.Email), new Claim(JwtRegisteredClaimNames.Email, user.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var token = new JwtSecurityToken(
_jwtSettings.Issuer,
_jwtSettings.Audience,
claims,
expires: expiresAt,
signingCredentials: credentials
); );
});
var response = new AuthResponse( var response = new AuthResponse(
new JwtSecurityTokenHandler().WriteToken(token), jwtToken,
expiresAt, expiresAt,
new UserInfo(user.Id, user.Email, user.VerifiedAt.HasValue) new UserInfo(user.Id, user.Email, user.VerifiedAt.HasValue)
); );