From 44cdf09012d27e12c3d113f9a3ffdc9ddc2853ad Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 05 九月 2025 14:23:57 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs | 67 +++++++++++++++++++++++++++++++++ 1 files changed, 66 insertions(+), 1 deletions(-) diff --git a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs b/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs index f9d47e6..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; @@ -53,6 +56,68 @@ /// <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> + /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 + /// </summary> /// <returns></returns> public static CurrentLogier GetCurrentLogier() { -- Gitblit v1.9.1