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 =>
{ {
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()), o.SigningKey = _jwtSettings.Secret;
new Claim(JwtRegisteredClaimNames.Email, user.Email), o.Issuer = _jwtSettings.Issuer;
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) o.Audience = _jwtSettings.Audience;
}; o.ExpireAt = expiresAt;
//o.User.Roles.Add("Manager", "Auditor");
var token = new JwtSecurityToken( o.User.Claims.Add(
_jwtSettings.Issuer, new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
_jwtSettings.Audience, new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
claims, new Claim(JwtRegisteredClaimNames.Email, user.Email),
expires: expiresAt, new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
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)
); );