From e49c42ad641fa7ddaa4250ffd408666b087d1d48 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 29 八月 2025 13:25:26 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs |   85 ++++++++++++++++++++++++++++++++++++++----
 1 files changed, 77 insertions(+), 8 deletions(-)

diff --git a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs b/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
index 5f1f8ad..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,7 +32,7 @@
             // 鐢熸垚 token
             logier.AccessToken = JWTEncryption.Encrypt(new Dictionary<string, object>()
             {
-                { "UserInfoId", logier.UserInfoId },
+                { "Id", logier.Id },
                 { "Avatar",logier.Avatar },
                 { "Name",logier.Name },
                 { "UserName",logier.UserName },
@@ -37,13 +40,79 @@
                 { "Level",logier.Level },
                 { "Type",logier.Type },
                 { "ClientType",logier.ClientType },
+                { "EnterpriseId",logier.EnterpriseId },
             });
             // 鑾峰彇鍒锋柊 token
             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>
@@ -55,15 +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;
+                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.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