Creating login connect dto

This commit is contained in:
2025-10-13 15:24:17 +02:00
parent 2e6d54a7cc
commit 38842eec69
2 changed files with 36 additions and 13 deletions

View File

@@ -0,0 +1,6 @@
namespace ApiEfCoreLibrary.DTO.Login.Response;
public class GetLoginConnectDto
{
public string? Token { get; set; }
}

View File

@@ -1,8 +1,14 @@
using ApiEfCoreLibrary.DTO.Login.Request; using ApiEfCoreLibrary.DTO.Login.Request;
using FastEndpoints.Security;
using ApiEfCoreLibrary.DTO.Login.Response;
using FastEndpoints;
using Microsoft.EntityFrameworkCore;
namespace ApiEfCoreLibrary.Endpoints.Login; namespace ApiEfCoreLibrary.Endpoints.Login;
public class UserLoginEndpoint
public class UserLoginEndpoint(LibraryDbContext database) : Endpoint<ConnectLoginDto, GetLoginConnectDto>
{ {
public override void Configure() public override void Configure()
{ {
@@ -12,26 +18,37 @@ public class UserLoginEndpoint
public override async Task HandleAsync(ConnectLoginDto req, CancellationToken ct) public override async Task HandleAsync(ConnectLoginDto req, CancellationToken ct)
{ {
if (await myAuthService.CredentialsAreValid(req.Username, req.Password, ct)) var login = await database.Logins.SingleOrDefaultAsync(x => x.Username == req.Username, ct);
if (login == null)
{
await Send.UnauthorizedAsync(ct);
return;
}
string? password = req.Password + login.Salt;
if (BCrypt.Net.BCrypt.Verify(password, login.Password))
{ {
var jwtToken = JwtBearer.CreateToken( var jwtToken = JwtBearer.CreateToken(
o => o =>
{ {
o.SigningKey = "A secret token signing key"; o.SigningKey = "A secret token signing key";
o.ExpireAt = DateTime.UtcNow.AddDays(1); o.ExpireAt = DateTime.UtcNow.AddMinutes(15);
o.User.Roles.Add("Manager", "Auditor"); o.User.Roles.Add("User", "Admin");
o.User.Claims.Add(("UserName", req.Username)); o.User.Claims.Add(("Username", login.Username));
o.User["UserId"] = "001"; //indexer based claim setting o.User.Claims.Add(("FullName", login.FullName));
o.User["UserId"] = "001";
}); });
await Send.OkAsync( GetLoginConnectDto responseDto = new()
new {
{ Token = jwtToken
req.Username, };
Token = jwtToken
}); await Send.OkAsync(responseDto, ct);
} }
else else
ThrowError("The supplied credentials are invalid!"); await Send.UnauthorizedAsync(ct);
} }
} }