From dbde30883895c6047995d84a846c36f79fc0a895 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 22 八月 2025 15:12:08 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs | 73 +++++++++++++++++++++++++++++++++++- 1 files changed, 70 insertions(+), 3 deletions(-) diff --git a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs b/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs index 0743dc1..813c6d3 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; @@ -43,8 +46,72 @@ 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()) + { + 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> -- Gitblit v1.9.1