From 77e004d090edb2db205bb1e4fd7bec972ffecde1 Mon Sep 17 00:00:00 2001 From: mmrbnjd Date: Thu, 18 Apr 2024 18:26:12 +0330 Subject: [PATCH] login service by localstorg --- Back/Common/ExtentionMethods.cs | 18 +++- Back/Controllers/UserController.cs | 16 ++- Back/Services/servUser.cs | 25 +++-- Shared/DTOs/UserAuthenticationDTO.cs | 2 + TaxPayerFull/FixedValues.cs | 9 ++ TaxPayerFull/Pages/Register.razor | 11 ++- TaxPayerFull/Pages/Sign-in.razor | 98 +++++++++++-------- TaxPayerFull/Program.cs | 18 +++- TaxPayerFull/Services/ILocalStorageService.cs | 44 +++++++++ TaxPayerFull/Services/MidLevel.cs | 39 ++++++++ TaxPayerFull/Services/localService.cs | 19 ++++ 11 files changed, 241 insertions(+), 58 deletions(-) create mode 100644 TaxPayerFull/FixedValues.cs create mode 100644 TaxPayerFull/Services/ILocalStorageService.cs create mode 100644 TaxPayerFull/Services/MidLevel.cs create mode 100644 TaxPayerFull/Services/localService.cs diff --git a/Back/Common/ExtentionMethods.cs b/Back/Common/ExtentionMethods.cs index 54a6617..4ca81ee 100644 --- a/Back/Common/ExtentionMethods.cs +++ b/Back/Common/ExtentionMethods.cs @@ -40,7 +40,17 @@ namespace Back.Common PersianCalendar PersianCal = new PersianCalendar(); return PersianCal.GetYear(date).ToString("0000") + PersianCal.GetMonth(date).ToString("00") + - PersianCal.GetDayOfMonth(date).ToString("00"); + PersianCal.GetDayOfMonth(date).ToString("00") + ; + } + public static string ConvertMiladiToShamsiByTime(this DateTime date) + { + PersianCalendar PersianCal = new PersianCalendar(); + return PersianCal.GetYear(date).ToString("0000") + + PersianCal.GetMonth(date).ToString("00") + + PersianCal.GetDayOfMonth(date).ToString("00") + + date.Hour.ToString("00") + date.Minute.ToString("00") + date.Second.ToString("00") + ; } public static string ShamciToFormatShamci(this string str) { @@ -52,6 +62,12 @@ namespace Back.Common PersianCalendar p = new PersianCalendar(); return p.ToDateTime(Convert.ToInt32(value.Substring(0, 4)), Convert.ToInt32(value.Substring(4, 2)), Convert.ToInt32(value.Substring(6, 2)), 0, 0, 0, 0); } + public static DateTime ToMiladiByTime(this string value) + { + PersianCalendar p = new PersianCalendar(); + return p.ToDateTime(Convert.ToInt32(value.Substring(0, 4)), Convert.ToInt32(value.Substring(4, 2)), Convert.ToInt32(value.Substring(6, 2)), Convert.ToInt32(value.Substring(8, 2)), Convert.ToInt32(value.Substring(10, 2)), Convert.ToInt32(value.Substring(12, 2)), 0); + + } public static async Task> Paging(this IQueryable values, int pageId, int take) { if (/*values.Count()<1000 && */pageId == 0 && take == 0) diff --git a/Back/Controllers/UserController.cs b/Back/Controllers/UserController.cs index 315d1e0..6694920 100644 --- a/Back/Controllers/UserController.cs +++ b/Back/Controllers/UserController.cs @@ -26,14 +26,20 @@ namespace Back.Controllers if (result != null) return Ok(result); else return NotFound("کاربری با این مشخصات یافت نشد"); } - [HttpGet("test")] - - public async Task test() + [HttpGet("CheckAuthenticate")] + public async Task> CheckAuthenticate() { - return Ok(); - + // var accessToken = Request.Headers["Authorization"].ToString().Split(' ')[1]; + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var result = await _servUser.UserAuthentication(UserID,newtoken:false); + return Ok(result); } + + + + } } diff --git a/Back/Services/servUser.cs b/Back/Services/servUser.cs index 938cdad..d40d33f 100644 --- a/Back/Services/servUser.cs +++ b/Back/Services/servUser.cs @@ -42,7 +42,7 @@ namespace Back.Services // .ThenInclude(ti => ti.CalculationType) .FirstOrDefaultAsync(); } - public async Task UserAuthentication(string UserNameORUserID, string Password="") + public async Task UserAuthentication(string UserNameORUserID, string Password="",bool newtoken=true) { UserAuthenticationDTO ret = new UserAuthenticationDTO(); User? user = null; @@ -54,7 +54,10 @@ namespace Back.Services if (user == null) return null; - ret.Token =await CerateToken(user.ID, user.Username); + + string Jwt_Lifetime_Minutes = await GetJwt_Lifetime_Minutes(); + + ret.Token =newtoken ? await CerateToken(user.ID, user.Username, Jwt_Lifetime_Minutes) : user.Token; ret.FullName = user.Fullname; ret.Photo = user.Photo==null ? null : Convert.ToBase64String(user.Photo); //foreach (var rol in user.RolUsers) @@ -127,6 +130,9 @@ namespace Back.Services Logo = user.RolUsers.First().Company.Logo == null ? null : Convert.ToBase64String(user.RolUsers.First().Company.Logo) }; + var dt = newtoken ? DateTime.Now : user.DateLastLogin.ToMiladiByTime(); + ret.enterDate= dt; + ret.exitDate= dt.AddMinutes(Convert.ToInt32(Jwt_Lifetime_Minutes)); return ret; } public async Task AddUser(User item) @@ -154,7 +160,10 @@ namespace Back.Services } public async Task GetUserByUserID(int UserID) { - return await _RepoUser.Get(w => w.ID == UserID).FirstOrDefaultAsync(); + return await _RepoUser.Get(w => w.ID == UserID) + .Include(ti => ti.RolUsers) + .ThenInclude(ti => ti.Company) + .FirstOrDefaultAsync(); } public async Task SetTokenAndDateLogininDB(int UserID,string Token) { @@ -162,7 +171,7 @@ namespace Back.Services if (user != null) { user.Token = Token; - user.DateLastLogin=DateTime.Now.ConvertMiladiToShamsi(); + user.DateLastLogin=DateTime.Now.ConvertMiladiToShamsiByTime(); await _RepoUser.UpdateAsync(user); } } @@ -229,9 +238,9 @@ namespace Back.Services return await _RepoUser.UpdateByObjAsync(user); } //--------internal - private async Task CerateToken(int UserId, string UserName) + private async Task GetJwt_Lifetime_Minutes() { - string Jwt_Lifetime_Minutes = ""; + string Jwt_Lifetime_Minutes = "60"; try { Jwt_Lifetime_Minutes = _configuration["Fixedvalues:Jwt_Lifetime_Minutes"].ToString(); @@ -254,6 +263,10 @@ namespace Back.Services //To DO } + return Jwt_Lifetime_Minutes; + } + private async Task CerateToken(int UserId, string UserName,string Jwt_Lifetime_Minutes) + { #region CreateToken var securityKey = new SymmetricSecurityKey( Encoding.ASCII.GetBytes(Fixedvalues.SecretForKey) diff --git a/Shared/DTOs/UserAuthenticationDTO.cs b/Shared/DTOs/UserAuthenticationDTO.cs index 43a6889..0cca5ff 100644 --- a/Shared/DTOs/UserAuthenticationDTO.cs +++ b/Shared/DTOs/UserAuthenticationDTO.cs @@ -7,6 +7,8 @@ namespace Shared.DTOs public string FullName { get; set; } public string Token { get; set; } + public DateTime enterDate { get; set; } + public DateTime exitDate { get; set; } public string Photo { get; set; } public CompanyAuthenticationDTO Company { get; set; } diff --git a/TaxPayerFull/FixedValues.cs b/TaxPayerFull/FixedValues.cs new file mode 100644 index 0000000..825fcee --- /dev/null +++ b/TaxPayerFull/FixedValues.cs @@ -0,0 +1,9 @@ +using Shared.DTOs; + +namespace Front +{ + public static class Fixedvalues + { + public static UserAuthenticationDTO Userinfo=new UserAuthenticationDTO(); + } +} diff --git a/TaxPayerFull/Pages/Register.razor b/TaxPayerFull/Pages/Register.razor index 69f6dd2..aeaa0eb 100644 --- a/TaxPayerFull/Pages/Register.razor +++ b/TaxPayerFull/Pages/Register.razor @@ -1,8 +1,9 @@ @page "/Register" +@using Front.Services @using Shared.DTOs @inject HttpClient _hc @inject NavigationManager nav -@inject UserAuthenticationDTO userinfo +@inject localService localserv; ثبت نام
@@ -89,11 +90,13 @@ protected override async Task OnInitializedAsync() { - if (userinfo!=null) - nav.NavigateTo("/"); - + editContext = new EditContext(model); messageStore = new(editContext); + + if (await localserv.OnlineUser()) + nav.NavigateTo("/"); + await base.OnInitializedAsync(); } } diff --git a/TaxPayerFull/Pages/Sign-in.razor b/TaxPayerFull/Pages/Sign-in.razor index 3233951..e33c524 100644 --- a/TaxPayerFull/Pages/Sign-in.razor +++ b/TaxPayerFull/Pages/Sign-in.razor @@ -1,9 +1,11 @@ @page "/Sign-in" +@using Front.Services @using Shared.DTOs - +@inject ILocalStorageService Storage; +@inject UserAuthenticationDTO userinfo +@inject localService localserv; @inject HttpClient _hc @inject NavigationManager nav -@inject UserAuthenticationDTO userinfo ورود
@@ -41,7 +43,7 @@ - + - -