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