Przeglądaj źródła

Send verify code

Warr 3 lat temu
rodzic
commit
5e5402dc20

+ 32 - 0
.gitignore

@@ -108,3 +108,35 @@ _UpgradeReport_Files/
 Backup*/
 UpgradeLog*.XML
 
+
+#Ignore thumbnails created by Windows
+Thumbs.db
+#Ignore files built by Visual Studio
+*.obj
+*.exe
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+[Bb]in
+[Dd]ebug*/
+*.lib
+*.sbr
+obj/
+[Rr]elease*/
+_ReSharper*/
+[Tt]est[Rr]esult*
+.vs/
+#Nuget packages folder
+packages/

+ 2 - 0
generator/CodeGeneratorStandardModule/DOPropAutoGenerator.cs

@@ -15,6 +15,8 @@ namespace CodeGeneratorStandardModule
         public void Execute(GeneratorExecutionContext context)
         {
             var codeFiles = new List<string>();
+            codeFiles.Add("http://git.ius.plus:88/warr.qian/WingSMSModule/raw/master/src/Service/ISMSService.cs");
+            codeFiles.Add("http://git.ius.plus:88/warr.qian/WingEmailModule/raw/master/src/Service/IEmailService.cs");
             codeFiles.Add("http://git.ius.plus:88/warr.qian/WingSessionModule/raw/master/src/Entity/SessionClientInfo.cs");
             codeFiles.Add("http://git.ius.plus:88/warr.qian/WingSessionModule/raw/master/src/Entity/SessionInfo.cs");
             codeFiles.Add("http://git.ius.plus:88/warr.qian/WingSessionModule/raw/master/src/Service/ISessionService.cs");

+ 1 - 1
src/Entity/UserInfo.cs

@@ -10,7 +10,7 @@ namespace WingUserModule.Entity
         /// <summary>
         /// User code
         /// </summary>
-        public string UserCode { get; set; }
+        public string UserCode { get; init; }
 
         [JsonPropertyName("userName")]
         /// <summary>

+ 17 - 0
src/Entity/VerifyCodeInfo.cs

@@ -0,0 +1,17 @@
+using System;
+
+namespace WingUserModule.Entity
+{
+    public class VerifyCodeInfo
+    {
+        public string VerifyCode { get; set; }
+
+        public int ValidMinutes { get; set; }
+
+        public DateTime CreateTime { get; set; }
+
+        public DateTime OverdueTime => CreateTime.AddMinutes(ValidMinutes);
+
+        public bool IsOverdue => OverdueTime < DateTime.Now;
+    }
+}

+ 1 - 0
src/Processor/WechatLoginProcessor.cs

@@ -34,6 +34,7 @@ namespace WingUserModule.Processor
             var password = $"WechatPw_{userLoginInfo.ClientInfo.ClientDeviceId}_{wechatLoginInfo.WechatToken}";
             var userInfo = new UserInfo
             {
+                UserCode = Guid.NewGuid().ToString("N").ToLower(),
                 UserName = userName,
                 SecretPassword = password
             };

+ 4 - 0
src/Service/ILoginService.cs

@@ -25,5 +25,9 @@ namespace WingUserModule.Service
         /// <returns></returns>
         [ReturnType(typeof(bool))]
         Task<dynamic> SignInAsync(UserInfo userInfo);
+
+        
+        [ReturnType(typeof(string))]
+        Task<dynamic> GetVerificationCode(string userPhone);
     }
 }

+ 54 - 9
src/Service/LoginService.cs

@@ -1,22 +1,26 @@
-using AppFramework.Common.Exceptions;
+using System;
+using AppFramework.Common.Exceptions;
 using AppFramework.Common.Mapper;
 using AppFramework.JsonRpc.Driver;
-using WingUserModule.Entity;
-using WingUserModule.Processor;
-using WingSessionModule.Entity;
-using WingSessionModule.Service;
+using System.Collections.Generic;
+using System.Collections.Concurrent;
 using System.Threading.Tasks;
-using UnifiedLog.Service;
+using UnifiedLogModule.Service;
 using WingCloudMongoDB.Repositories.DO;
 using WingCloudMongoDB.Service;
+using WingSessionModule.Entity;
+using WingSMSModule.Service;
+using WingUserModule.Entity;
+using WingUserModule.Processor;
 
 namespace WingUserModule.Service
 {
     public class LoginService : BaseRpcService, ILoginService
     {
         private IUserDBService _userServiceProxy;
-        private ISessionService _sessionServiceProxy;
         private IServerLogService _serverLogService;
+        private ISMSService _smsService;
+        private ConcurrentDictionary<string, VerifyCodeInfo> _mobileVerifyCodes = new ConcurrentDictionary<string, VerifyCodeInfo>();
 
         /// <summary>
         /// Init service
@@ -24,8 +28,8 @@ namespace WingUserModule.Service
         public override void InitService()
         {
             _userServiceProxy = GetProxy<IUserDBService>();
-            _sessionServiceProxy = GetProxy<ISessionService>();
             _serverLogService = GetProxy<IServerLogService>();
+            _smsService = GetProxy<ISMSService>();
         }
 
         /// <summary>
@@ -63,7 +67,48 @@ namespace WingUserModule.Service
             }
             var userInfoDO = userInfo.MappingTo<UserInfoDO>();
             await _userServiceProxy.InsertUserAsync(userInfoDO, string.Empty);
-            return true;
+            return await Task.FromResult(true);
+        }
+
+        public async Task<dynamic> CheckVerificationCode(string userPhone, string verifyCode)
+        {
+            var mobileVerifyCode = GetVerifyCode(userPhone);
+            if (mobileVerifyCode != null && mobileVerifyCode.VerifyCode == verifyCode && !mobileVerifyCode.IsOverdue)
+            {
+                return await Task.FromResult(true);
+            }
+            return await Task.FromResult(false);
+        }
+
+        public async Task<dynamic> GetVerificationCode(string userPhone)
+        {
+            var validMinutes = 10;
+            var verifyCode = GetVerifyCode(userPhone, validMinutes);
+            return await _smsService.SendMessage(new List<string>{ userPhone },"1017793",new List<string>{ verifyCode });
+        }
+
+        private string GetVerifyCode(string userPhone, int validMinutes)
+        {
+            if (_mobileVerifyCodes.ContainsKey(userPhone))
+            {
+                _mobileVerifyCodes.TryRemove(userPhone, out _);
+            }
+            var mobileVerifyCode = _mobileVerifyCodes.GetOrAdd(userPhone, new VerifyCodeInfo
+            {
+                VerifyCode = new Random().Next(1000, 9999).ToString(),
+                ValidMinutes = validMinutes,
+                CreateTime = DateTime.Now,
+            });
+            return mobileVerifyCode.VerifyCode;
+        }
+
+        private VerifyCodeInfo GetVerifyCode(string userPhone)
+        {
+            if (_mobileVerifyCodes.ContainsKey(userPhone))
+            {
+                return _mobileVerifyCodes[userPhone];
+            }
+            return null;
         }
     }
 }