瀏覽代碼

GetConfirmEmailURL

zinab_elgendy 1 年之前
父節點
當前提交
5f7bacea35

+ 10 - 2
MTWorkHR.API/Controllers/AuthController.cs

@@ -1,8 +1,10 @@
 using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Identity;
 using Microsoft.AspNetCore.Mvc;
 using MTWorkHR.Application.Filters;
 using MTWorkHR.Application.Identity;
 using MTWorkHR.Application.Models;
+using MTWorkHR.Core.Global;
 using MTWorkHR.Identity.Services;
 
 namespace MTWorkHR.API.Controllers
@@ -50,7 +52,13 @@ namespace MTWorkHR.API.Controllers
         {
             return await _userService.ForgetPassword(model);
         }
-       
-        
+        [HttpGet]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+
+        public async Task<bool> ConfirmEmail(ForgetPasswordDto model)
+        {
+            var result = await _userService.ConfirmEmail(model);
+            return result;
+        }
     }
 }

+ 1 - 0
MTWorkHR.Application/Identity/IUserService.cs

@@ -21,6 +21,7 @@ namespace MTWorkHR.Application.Identity
         Task<bool> ResetPassword(ResetPasswordDto input);
 
         Task<bool> ForgetPassword(ForgetPasswordDto model);
+        Task<bool> ConfirmEmail(ForgetPasswordDto model);
         Task<bool> IsExpiredToken(ForgetPasswordDto model);
     }
 }

+ 2 - 0
MTWorkHR.Application/Models/Identity/ForgetPasswordDto.cs

@@ -10,5 +10,7 @@ namespace MTWorkHR.Application.Models
         public string Token { get; set; }
         
         public string Password { get; set; }
+        public string Email { get; set; }
+
     }
 }

+ 28 - 2
MTWorkHR.Application/Services/Auth/UserService.cs

@@ -21,6 +21,8 @@ using Microsoft.AspNetCore.Identity.UI.Services;
 using IEmailSender = MTWorkHR.Application.Services.IEmailSender;
 using System.Security.Policy;
 using MTWorkHR.Application.Services.Interfaces;
+using Microsoft.AspNetCore.Mvc;
+using Azure.Core;
 
 namespace MTWorkHR.Identity.Services
 {
@@ -124,7 +126,7 @@ namespace MTWorkHR.Identity.Services
             _unitOfWork.CommitTran();
             try
             {
-                var resultPassReset = await GetResetPasswordURL(user.Id);
+                var resultPassReset = await GetConfirmEmailURL(user.Id);
 
                 var sendMailResult = await _emailSender.SendEmail(new EmailMessage {
                     Subject = "Register Confirmation",
@@ -143,6 +145,14 @@ namespace MTWorkHR.Identity.Services
 
             return input;
         }
+        public async Task<bool> ConfirmEmail(ForgetPasswordDto input)
+        {
+            var user = await _userManager.FindByEmailAsync(input.Email);
+            if (user == null)
+                throw new AppException(ExceptionEnum.RecordNotExist);
+            var result = await _userManager.ConfirmEmailAsync(user, input.Token);
+            return result.Succeeded ;
+        }
         private async Task<Tuple< string, string>> GetResetPasswordURL(string userId)
         {
             var user = await _userManager.Users.FirstOrDefaultAsync(x => (!x.IsDeleted) && x.Id.Equals(userId));
@@ -150,13 +160,29 @@ namespace MTWorkHR.Identity.Services
                 throw new AppException(ExceptionEnum.RecordNotExist);
 
             string code = await _userManager.GeneratePasswordResetTokenAsync(user);
-            var route = "auth/forgetpassword";
+            var route = "auth/ConfirmEmail";
             var origin = _configuration.JwtSettings.Audience;
             var endpointUri = new Uri(string.Concat($"{origin}/", route));
             var userURL = QueryHelpers.AddQueryString(endpointUri.ToString(), "userId", user.Id);
             var passwordResetURL = QueryHelpers.AddQueryString(userURL.ToString(), "token", code);
             return new Tuple <string, string> ( passwordResetURL, user.Email);
         }
+
+        private async Task<Tuple<string, string>> GetConfirmEmailURL(string userId)
+        {
+            var user = await _userManager.Users.FirstOrDefaultAsync(x => (!x.IsDeleted) && x.Id.Equals(userId));
+            if (user == null)
+                throw new AppException(ExceptionEnum.RecordNotExist);
+
+            string token = await _userManager.GenerateEmailConfirmationTokenAsync(user);
+            var route = "auth/forgetpassword";
+            var origin = _configuration.JwtSettings.Audience;
+            var endpointUri = new Uri(string.Concat($"{origin}/", route));
+            var userURL = QueryHelpers.AddQueryString(endpointUri.ToString(), "userId", user.Id);
+            var confirmEmailUrl = QueryHelpers.AddQueryString(userURL.ToString(), "token", token);
+            return new Tuple<string, string>(confirmEmailUrl, user.Email);
+        }
+
         public Task<UserDto> Update(UserDto input)
         {
             throw new NotImplementedException();