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 FastEndpoints.Security;
using ApiEfCoreLibrary.DTO.Login.Response;
using FastEndpoints;
using Microsoft.EntityFrameworkCore;
namespace ApiEfCoreLibrary.Endpoints.Login;
public class UserLoginEndpoint
public class UserLoginEndpoint(LibraryDbContext database) : Endpoint<ConnectLoginDto, GetLoginConnectDto>
{
public override void Configure()
{
@@ -12,26 +18,37 @@ public class UserLoginEndpoint
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(
o =>
{
o.SigningKey = "A secret token signing key";
o.ExpireAt = DateTime.UtcNow.AddDays(1);
o.User.Roles.Add("Manager", "Auditor");
o.User.Claims.Add(("UserName", req.Username));
o.User["UserId"] = "001"; //indexer based claim setting
o.ExpireAt = DateTime.UtcNow.AddMinutes(15);
o.User.Roles.Add("User", "Admin");
o.User.Claims.Add(("Username", login.Username));
o.User.Claims.Add(("FullName", login.FullName));
o.User["UserId"] = "001";
});
await Send.OkAsync(
new
{
req.Username,
Token = jwtToken
});
GetLoginConnectDto responseDto = new()
{
Token = jwtToken
};
await Send.OkAsync(responseDto, ct);
}
else
ThrowError("The supplied credentials are invalid!");
await Send.UnauthorizedAsync(ct);
}
}