Creating login connect dto
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
namespace ApiEfCoreLibrary.DTO.Login.Response;
|
||||||
|
|
||||||
|
public class GetLoginConnectDto
|
||||||
|
{
|
||||||
|
public string? Token { get; set; }
|
||||||
|
}
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user