From bf17ad2051de62b9b49fb72bf6ae14d23bfef62b Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 11 九月 2025 10:20:20 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs |  100 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 87 insertions(+), 13 deletions(-)

diff --git a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs b/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
index 97b22f9..c0835dc 100644
--- a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
+++ b/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
@@ -1,7 +1,10 @@
-锘縰sing Furion;
+锘縰sing Azure.Core;
+using Furion;
+using Furion.DatabaseAccessor;
 using Furion.DataEncryption;
 using Furion.FriendlyException;
 using Microsoft.AspNetCore.Http;
+using Microsoft.EntityFrameworkCore;
 using Microsoft.Extensions.Options;
 using Microsoft.IdentityModel.Tokens;
 using Newtonsoft.Json;
@@ -29,18 +32,87 @@
             // 鐢熸垚 token
             logier.AccessToken = JWTEncryption.Encrypt(new Dictionary<string, object>()
             {
-                { "UserInfoId", logier.UserInfoId },
-                { "Avatar",logier.AvatarId },
+                { "Id", logier.Id },
+                { "Avatar",logier.Avatar },
                 { "Name",logier.Name },
                 { "UserName",logier.UserName },
                 { "PhoneNumber",logier.PhoneNumber },
+                { "Level",logier.Level },
+                { "Type",logier.Type },
+                { "ClientType",logier.ClientType },
+                { "EnterpriseId",logier.EnterpriseId },
             });
             // 鑾峰彇鍒锋柊 token
-            logier.RefreshToken = JWTEncryption.GenerateRefreshToken(logier.AccessToken, 60);
+            logier.RefreshToken = JWTEncryption.GenerateRefreshToken(logier.AccessToken, 60 * 24);
 
             // 璁剧疆鍝嶅簲鎶ユ枃澶�
-            httpContextAccessor.HttpContext.Response.Headers["access-token"] = logier.AccessToken;
-            httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = logier.RefreshToken;
+            if (httpContextAccessor.HttpContext != null)
+            {
+                httpContextAccessor.HttpContext.Response.Headers["access-token"] = logier.AccessToken;
+                httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = logier.RefreshToken;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+        /// </summary>
+        /// <param name="user"></param>
+        /// <param name="clientType"></param>
+        /// <param name="session_key"></param>
+        /// <returns></returns>
+        public static LoginCommandCallback GetCurrentLogier(this User user, EnumClientType clientType, string session_key = null)
+        {
+            var logier = new CurrentLogier
+            {
+                Id = user.Id,
+                Avatar = user.Avatar,
+                Name = user.Name,
+                UserName = user.UserName,
+                PhoneNumber = user.PhoneNumber,
+                Level = user.Level,
+                Type = user.Type,
+                ClientType = clientType,
+                EnterpriseId = user.EnterpriseId,
+            };
+            GenerateToken(logier);
+
+            return new LoginCommandCallback
+            {
+                Id = logier.Id,
+                AccessToken = logier.AccessToken,
+                RefreshToken = logier.RefreshToken,
+                SessionKey = session_key,
+                IsBindPhoneNumber = logier.PhoneNumber.IsNotNull()
+            };
+        }
+
+        public static async Task<LoginCommandCallback> GetCurrentLogier(this string accessToken)
+        {
+            if (accessToken.IsNotNull())
+            {
+                accessToken = accessToken.Replace("Bearer ", null);
+                var claims = JWTEncryption.ReadJwtToken(accessToken)?.Claims;
+                if (claims != null)
+                {
+                    var claimIdentity = new ClaimsIdentity("AuthenticationTypes.Federation");
+                    claimIdentity.AddClaims(claims);
+                    var claimsPrincipal = new ClaimsPrincipal(claimIdentity);
+                    var userId = claimsPrincipal.FindFirstValue("Id").ToGuid();
+                    var clientType = claimsPrincipal.FindFirstValue("ClientType").ToEnum<EnumClientType>();
+                    if (userId.HasValue && clientType.HasValue)
+                    {
+                        var user = await Db.GetRepository<User>().AsQueryable().AsNoTracking()
+                            .Where(it => it.Id == userId)
+                            .FirstOrDefaultAsync();
+                        if (user != null)
+                        {
+                            var logier = user.GetCurrentLogier(clientType.Value);
+                            return logier;
+                        }
+                    }
+                }
+            }
+            return null;
         }
 
         /// <summary>
@@ -52,13 +124,15 @@
             if (App.User != null && App.User.Identity.IsAuthenticated)
             {
                 var logier = new CurrentLogier();
-                if (Guid.TryParse(App.User?.FindFirstValue("UserInfoId"), out var userInfoId)) logier.UserInfoId = userInfoId;
-                else return null;
-                if (Guid.TryParse(App.User?.FindFirstValue("AvatarId"), out var avatarId)) logier.AvatarId = avatarId;
-                else return null;
-                logier.Name = App.User?.FindFirstValue("Name");
-                logier.UserName = App.User?.FindFirstValue("UserName");
-                logier.PhoneNumber = App.User?.FindFirstValue("PhoneNumber");
+                logier.Id = App.User.FindFirstValue("Id").ToGuid("缂哄け鐢ㄦ埛Id锛岃閲嶆柊鐧诲綍").Value;
+                logier.Level = App.User.FindFirstValue("Level")?.ToInt() ?? 0;
+                logier.Avatar = App.User.FindFirstValue("Avatar");
+                logier.Name = App.User.FindFirstValue("Name");
+                logier.UserName = App.User.FindFirstValue("UserName");
+                logier.PhoneNumber = App.User.FindFirstValue("PhoneNumber");
+                logier.Type = App.User.FindFirstValue("Type").ToEnum<EnumUserType>("缂哄け鐢ㄦ埛绫诲瀷锛岃閲嶆柊鐧诲綍").Value;
+                logier.ClientType = App.User.FindFirstValue("ClientType").ToEnum<EnumClientType>("缂哄け瀹㈡埛绔被鍨嬶紝璇烽噸鏂扮櫥褰�").Value;
+                logier.EnterpriseId = App.User.FindFirstValue("EnterpriseId").ToGuid();
                 return logier;
             }
             return null;

--
Gitblit v1.9.1