From 1ed646654c13e57e452e31e60331e0bfafa8a026 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期一, 11 八月 2025 13:52:49 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs | 73 ++++++++++++++++++++++++++++++++++++ 1 files changed, 73 insertions(+), 0 deletions(-) diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs index 2bcd723..71a666a 100644 --- a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; @@ -24,6 +25,7 @@ IRequestHandler<PasswordLoginCommand, LoginCommandCallback>, IRequestHandler<SmsLoginCommand, LoginCommandCallback>, IRequestHandler<WxmpLoginCommand, LoginCommandCallback>, + IRequestHandler<BindWxmpUserInfoCommand, LoginCommandCallback>, IRequestHandler<BindPhoneNumberCommand, bool> { private readonly IRepository<User> rep = rep; @@ -143,6 +145,77 @@ } /// <summary> + /// 缁戝畾寰俊灏忕▼搴忕敤鎴蜂俊鎭� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="NotImplementedException"></exception> + public async Task<LoginCommandCallback> Handle(BindWxmpUserInfoCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + var user = await rep.AsQueryable() + .Where(it => it.Type == logier.Type && it.Id == logier.Id) + .FirstOrDefaultAsync(cancellationToken); + if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "褰撳墠璐﹀彿"); + if (user.WxmpOpenId.IsNull()) throw Oops.Oh(EnumUserErrorCodeType.u1100); + + if (user.PhoneNumber.IsNull()) + { + var result = string.Empty; + RijndaelManaged rijalg = new RijndaelManaged(); + rijalg.KeySize = 128; + rijalg.Padding = PaddingMode.PKCS7; + rijalg.Mode = CipherMode.CBC; + rijalg.Key = Convert.FromBase64String(request.SessionKey); + rijalg.IV = Convert.FromBase64String(request.Iv); + byte[] encryptedData = Convert.FromBase64String(request.EncryptedData); + ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV); + using (MemoryStream msDecrypt = new MemoryStream(encryptedData)) + { + using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) + { + using (StreamReader srDecrypt = new StreamReader(csDecrypt)) + { + result = srDecrypt.ReadToEnd(); + } + } + } + var info = result.JsonTo<BindWxmpUserInfoCommandEncryptedData>(); + if (info == null || info.PhoneNumber.IsNull()) + { + throw Oops.Oh(EnumUserErrorCodeType.u1110); + } + + var bindPhoneNumberUser = await rep.AsQueryable() + .Where(it => it.Type == logier.Type && it.PhoneNumber == info.PhoneNumber && it.Id != user.Id) + .FirstOrDefaultAsync(cancellationToken); + if (bindPhoneNumberUser == null) + { + user.PhoneNumber = info.PhoneNumber; + user.ContactPhoneNumber = info.PhoneNumber; + user.IsCheckPhoneNumber = true; + + if (user.UserName == user.WxmpOpenId) + { + user.UserName = info.PhoneNumber; + } + } + else if (bindPhoneNumberUser.WxmpOpenId.IsNull()) + { + bindPhoneNumberUser.WxmpOpenId = user.WxmpOpenId; + await rep.DeleteAsync(user); + return GetCurrentLogier(bindPhoneNumberUser, EnumClientType.Wxmp); + } + else if (bindPhoneNumberUser.WxmpOpenId != user.WxmpOpenId) + { + throw Oops.Oh(EnumUserErrorCodeType.u1120); + } + } + return GetCurrentLogier(user, EnumClientType.Wxmp); + } + + /// <summary> /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 /// </summary> /// <param name="user"></param> -- Gitblit v1.9.1