new SignInService
This commit is contained in:
parent
4cafd88502
commit
3e7663bbbe
@ -0,0 +1,9 @@
|
||||
namespace EnotaryoPH.Web.Common.Services
|
||||
{
|
||||
public interface ISignInService
|
||||
{
|
||||
Task SignInAsync(UserLogin userLogin);
|
||||
|
||||
Task SignOutAsync();
|
||||
}
|
||||
}
|
38
EnotaryoPH/EnotaryoPH.Web/Common/Services/SignInService.cs
Normal file
38
EnotaryoPH/EnotaryoPH.Web/Common/Services/SignInService.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNetCore.Authentication;
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
|
||||
namespace EnotaryoPH.Web.Common.Services
|
||||
{
|
||||
public class SignInService : ISignInService
|
||||
{
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public SignInService(IHttpContextAccessor httpContextAccessor) => _httpContextAccessor = httpContextAccessor;
|
||||
|
||||
public async Task SignInAsync(UserLogin userLogin)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(userLogin.Email);
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(userLogin.Role);
|
||||
ArgumentOutOfRangeException.ThrowIfEqual(Guid.Empty, userLogin.User_UID);
|
||||
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new(ClaimTypes.NameIdentifier, userLogin.User_UID.ToString()),
|
||||
new(ClaimTypes.Name, userLogin.Email),
|
||||
new(ClaimTypes.Email, userLogin.Email),
|
||||
new(ClaimTypes.Role, userLogin.Role!)
|
||||
};
|
||||
var claimsIdentity = new ClaimsIdentity(
|
||||
claims, CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
var authProperties = new AuthenticationProperties();
|
||||
|
||||
await _httpContextAccessor.HttpContext.SignInAsync(
|
||||
CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
new ClaimsPrincipal(claimsIdentity),
|
||||
authProperties);
|
||||
}
|
||||
|
||||
public async Task SignOutAsync() => await _httpContextAccessor.HttpContext.SignOutAsync();
|
||||
}
|
||||
}
|
9
EnotaryoPH/EnotaryoPH.Web/Common/Services/UserLogin.cs
Normal file
9
EnotaryoPH/EnotaryoPH.Web/Common/Services/UserLogin.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace EnotaryoPH.Web.Common.Services
|
||||
{
|
||||
public class UserLogin
|
||||
{
|
||||
public string Email { get; set; }
|
||||
public string Role { get; set; }
|
||||
public Guid User_UID { get; set; }
|
||||
}
|
||||
}
|
@ -1,31 +1,28 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Security.Claims;
|
||||
using EnotaryoPH.Data;
|
||||
using EnotaryoPH.Web.Common.Services;
|
||||
using Microsoft.AspNetCore.Authentication;
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace EnotaryoPH.Web.Pages
|
||||
{
|
||||
public class LoginModel : PageModel
|
||||
{
|
||||
private readonly NotaryoDBContext _notaryoDBContext;
|
||||
private readonly ISignInService _signInService;
|
||||
private readonly IPasswordService _passwordService;
|
||||
|
||||
public LoginModel(IPasswordService passwordService, NotaryoDBContext notaryoDBContext)
|
||||
public LoginModel(IPasswordService passwordService, NotaryoDBContext notaryoDBContext, ISignInService signInService)
|
||||
{
|
||||
_passwordService = passwordService;
|
||||
_notaryoDBContext = notaryoDBContext;
|
||||
_signInService = signInService;
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnGetAsync() => Page();
|
||||
|
||||
public async Task<IActionResult> OnGetLogoutAsync()
|
||||
{
|
||||
await HttpContext.SignOutAsync();
|
||||
await _signInService.SignOutAsync();
|
||||
return RedirectToPage("/Login");
|
||||
}
|
||||
|
||||
@ -49,21 +46,12 @@ namespace EnotaryoPH.Web.Pages
|
||||
return Page();
|
||||
}
|
||||
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new(ClaimTypes.NameIdentifier, user.User_UID.ToString()),
|
||||
new(ClaimTypes.Name, user.Email),
|
||||
new(ClaimTypes.Email, user.Email),
|
||||
new(ClaimTypes.Role, user.Role!)
|
||||
};
|
||||
var claimsIdentity = new ClaimsIdentity(
|
||||
claims, CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
var authProperties = new AuthenticationProperties();
|
||||
|
||||
await HttpContext.SignInAsync(
|
||||
CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
new ClaimsPrincipal(claimsIdentity),
|
||||
authProperties);
|
||||
await _signInService.SignInAsync(new UserLogin
|
||||
{
|
||||
Email = user.Email,
|
||||
Role = user.Role,
|
||||
User_UID = user.User_UID.Value
|
||||
});
|
||||
|
||||
var returnUrl = Request.Query["ReturnUrl"].ToString() ?? string.Empty;
|
||||
return RedirectToPage(string.IsNullOrEmpty(returnUrl) ? "/Principal/Dashboard/Dashboard" : returnUrl);
|
||||
|
@ -35,6 +35,7 @@ namespace EnotaryoPH.Web
|
||||
BaseUrl = config.GetValue<string>("BaseUrl") ?? ""
|
||||
});
|
||||
|
||||
builder.Services.AddTransient<ISignInService, SignInService>();
|
||||
builder.Services.AddTransient<IPasswordService, PasswordService>();
|
||||
builder.Services.AddTransient<ICurrentUserService, CurrentUserService>();
|
||||
builder.Services.AddTransient<ICompreFaceClient>(provider =>
|
||||
|
Loading…
x
Reference in New Issue
Block a user