From 36bfd0a99d25d9497cb7fa7e46f34198f7c73abd Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期一, 11 八月 2025 09:45:44 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs | 78 ++++++++++++++++++++++++++++++++++++++- 1 files changed, 76 insertions(+), 2 deletions(-) diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs index dad1665..2bcd723 100644 --- a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs @@ -19,12 +19,16 @@ /// </summary> public class LoginCommandHandler( IRepository<User> rep, - SmsUtils smsUtils) : + SmsUtils smsUtils, + WxmpUtils wxmpUtils) : IRequestHandler<PasswordLoginCommand, LoginCommandCallback>, - IRequestHandler<SmsLoginCommand, LoginCommandCallback> + IRequestHandler<SmsLoginCommand, LoginCommandCallback>, + IRequestHandler<WxmpLoginCommand, LoginCommandCallback>, + IRequestHandler<BindPhoneNumberCommand, bool> { private readonly IRepository<User> rep = rep; private readonly SmsUtils smsUtils = smsUtils; + private readonly WxmpUtils wxmpUtils = wxmpUtils; /// <summary> /// 瀵嗙爜鐧诲綍 @@ -62,11 +66,80 @@ var user = await rep.AsQueryable().AsNoTracking() .Where(it => it.UserName == request.PhoneNumber && it.Type == request.Type) .FirstOrDefaultAsync(cancellationToken); + if (user == null && request.Type == EnumUserType.Personal) + { + user = new User + { + Type = request.Type, + UserName = request.PhoneNumber, + PhoneNumber = request.PhoneNumber, + IsCheckPhoneNumber = true, + Level = 1, + Status = EnumUserStatus.Normal + }; + await rep.InsertAsync(user); + } if (user == null) throw Oops.Oh(EnumUserErrorCodeType.u1000); if (user.Status == EnumUserStatus.Disabled) throw Oops.Oh(EnumUserErrorCodeType.u1001); return GetCurrentLogier(user, request.ClientType); + } + + /// <summary> + /// 寰俊灏忕▼搴忕櫥褰� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<LoginCommandCallback> Handle(WxmpLoginCommand request, CancellationToken cancellationToken) + { + var snsJscode2session = await wxmpUtils.SnsJscode2sessionAsync(request.Type, request.Code, cancellationToken); + var user = await rep.AsQueryable().AsNoTracking() + .Where(it => it.WxmpOpenId == snsJscode2session.openid && it.Type == request.Type) + .FirstOrDefaultAsync(cancellationToken); + if (user == null && request.Type == EnumUserType.Personal) + { + user = new User + { + Type = request.Type, + UserName = snsJscode2session.openid, + WxmpOpenId = snsJscode2session.openid, + Level = 1, + Status = EnumUserStatus.Normal + }; + await rep.InsertAsync(user); + } + if (user == null) + throw Oops.Oh(EnumUserErrorCodeType.u1000); + if (user.Status == EnumUserStatus.Disabled) + throw Oops.Oh(EnumUserErrorCodeType.u1001); + return GetCurrentLogier(user, EnumClientType.Wxmp); + } + + /// <summary> + /// 缁戝畾鎵嬫満鍙� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<bool> Handle(BindPhoneNumberCommand request, CancellationToken cancellationToken) + { + await smsUtils.CheckVerifyCode(new CheckVerifyCodeModel + { + PhoneNumber = request.PhoneNumber, + VerifyCode = request.VerifyCode, + TemplateCode = EnumSmsTemplateCode.LoginOrRegister + }); + var logier = JwtUtils.GetCurrentLogier(); + var user = await rep.AsQueryable() + .FirstOrDefaultAsync(it => it.Id == logier.Id); + if (user == null) + throw Oops.Oh(EnumErrorCodeType.s404, "褰撳墠璐﹀彿涓嶅瓨鍦�"); + user.UserName = request.PhoneNumber; + user.PhoneNumber = request.PhoneNumber; + user.IsCheckPhoneNumber = true; + return true; } /// <summary> @@ -93,6 +166,7 @@ return new LoginCommandCallback { + Id = logier.Id, AccessToken = logier.AccessToken, RefreshToken = logier.RefreshToken, }; -- Gitblit v1.9.1