密码,邮箱手机号码验证

This commit is contained in:
2021-07-08 14:22:27 +08:00
parent f5762bfade
commit bf32a1825b
8 changed files with 194 additions and 56 deletions

View File

@@ -7189,6 +7189,13 @@
检验验证码并且绑定
</summary>
</member>
<member name="M:Ewide.Core.Service.SysUserService.GetPwdRule">
<summary>
获取密码强度配置
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="F:Ewide.Core.Util.CodeHelper.code_Countdown">
<summary>
发送验证码间隔时间(秒)
@@ -7271,6 +7278,13 @@
<param name="length"></param>
<returns></returns>
</member>
<member name="M:Ewide.Core.Util.CodeHelper.CheckRepeat(System.String)">
<summary>
检测是否重复
</summary>
<param name="Target"></param>
<returns></returns>
</member>
<member name="M:Ewide.Core.Util.MailHelper.#ctor(System.String,System.String)">
<summary>
邮箱类

View File

@@ -128,7 +128,6 @@ namespace Ewide.Core.Service
/// 新密码
/// </summary>
[Required(ErrorMessage = "新密码不能为空")]
[StringLength(32, MinimumLength = 5, ErrorMessage = "密码需要大于5个字符")]
public string NewPassword { get; set; }
/// <summary>

View File

@@ -29,7 +29,7 @@ namespace Ewide.Core.Service
Task<dynamic> SendCode(Usermailphone input);
Task<dynamic> CheckBindcode(Usermailphone input);
Task<dynamic> GetPwdRule();
Task<dynamic> GetOrgUserTree(OrgUserInput input);
}
}

View File

@@ -1,6 +1,7 @@
using Ewide.Core.Service.Role;
using Ewide.Core.Service.User.Dto;
using Ewide.Core.Util;
using Furion;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DataEncryption;
@@ -312,11 +313,26 @@ namespace Ewide.Core.Service
public async Task UpdateUserPwd(ChangePasswordUserInput input)
{
var user = await _sysUserRep.FirstOrDefaultAsync(u => u.Id == _userManager.UserId);
if (MD5Encryption.Encrypt(input.Password) != user.Password)
throw Oops.Oh(ErrorCode.D1004);
if (MD5Encryption.Encrypt(input.NewPassword).Equals(user.Password))
var Password = RSAHandler.RSADecrypt(input.Password);
Password = MD5Encryption.Encrypt(Password);
if (Password != user.Password)
{
throw Oops.Oh("旧密码不正确");
}
var newPassword = RSAHandler.RSADecrypt(input.NewPassword);
// 验证新密码强度
var pattern = App.Configuration.GetSection("SimplePassword:Pattern").Value;
if (!Regex.Match(newPassword, pattern).Success)
{
throw Oops.Oh("新密码强度不符合规则");
}
newPassword = MD5Encryption.Encrypt(newPassword);
if (newPassword.Equals(user.Password))
throw Oops.Oh(ErrorCode.D10041);
user.Password = MD5Encryption.Encrypt(input.NewPassword);
user.Password = newPassword;
}
/// <summary>
@@ -467,7 +483,7 @@ namespace Ewide.Core.Service
var Mailcode_Key = "ewide_mailcode";
var Regex_phone = @"^((13[0-9])|(14[5,7])|(15[^4,\\D])|(17[0,1,3,6-8])|(18[0-9])|(19[8,9])|(166))[0-9]{8}$";
var Regex_Email = @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
CodeHelper ch = new CodeHelper(_iMemoryCache);
CodeHelper ch = new CodeHelper(_iMemoryCache, _sysUserRep, _userManager);
//Type为1时给原手机号发送验证码
if (input.Type == 1)
{
@@ -484,7 +500,7 @@ namespace Ewide.Core.Service
//Type为2时给原邮箱发送验证码
else if (input.Type == 2)
{
if (new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$").IsMatch(_userManager.User.Email))
if (new Regex(Regex_Email).IsMatch(_userManager.User.Email))
{
try
{
@@ -500,6 +516,7 @@ namespace Ewide.Core.Service
//Type为null时则发验证码
else
{
await ch.CheckRepeat(input.Target);
//通过正则判断绑定类型
if (new Regex(Regex_phone).IsMatch(input.Target))
{
@@ -542,7 +559,7 @@ namespace Ewide.Core.Service
var Regex_phone = @"^((13[0-9])|(14[5,7])|(15[^4,\\D])|(17[0,1,3,6-8])|(18[0-9])|(19[8,9])|(166))[0-9]{8}$";
var Regex_Email = @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
var user = await _sysUserRep.FirstOrDefaultAsync(u => u.Id == _userManager.UserId);
CodeHelper ch = new CodeHelper(_iMemoryCache);
CodeHelper ch = new CodeHelper(_iMemoryCache, _sysUserRep,_userManager);
if (input.Type == 1)
{
if (ch.Checkcode(_userManager.User.Phone, input.Orgcode, Orgcode_Key))
@@ -655,6 +672,23 @@ namespace Ewide.Core.Service
}
}
/// <summary>
/// 获取密码强度配置
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/sysUser/getPwdRule")]
public async Task<dynamic> GetPwdRule()
{
return new LoginOutput
{
Pattern = App.Configuration.GetSection("SimplePassword:Pattern").Value,
Descriptions = App.Configuration.GetSection("SimplePassword:Descriptions").Value
};
}
[HttpPost("/sysUser/GetOrgUserTree")]
public async Task<dynamic> GetOrgUserTree(OrgUserInput input)
{

View File

@@ -2,7 +2,9 @@
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
using Furion;
using Furion.DatabaseAccessor;
using Furion.FriendlyException;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@@ -19,9 +21,17 @@ namespace Ewide.Core.Util
public class CodeHelper
{
private readonly IMemoryCache _IMemoryCache;
public CodeHelper(IMemoryCache IMemoryCache)
{
private readonly IRepository<SysUser> _sysUserRep; // 用户表仓储
private readonly IUserManager _userManager;
public CodeHelper(
IMemoryCache IMemoryCache,
IRepository<SysUser> sysUserRep,
IUserManager userManager
){
_IMemoryCache = IMemoryCache;
_sysUserRep = sysUserRep;
_userManager = userManager;
}
public static string Aliyun_AccessKey = App.Configuration["SmsHelper:Aliyun_AccessKey"];
public static string Aliyun_AccessSecret = App.Configuration["SmsHelper:Aliyun_AccessSecret"];
@@ -246,7 +256,25 @@ namespace Ewide.Core.Util
throw Oops.Oh(ErrorCode.xg1100);
}
}
/// <summary>
/// 检测是否重复
/// </summary>
/// <param name="Target"></param>
/// <returns></returns>
public async Task<bool> CheckRepeat(string Target)
{
var Regex_phone = @"^((13[0-9])|(14[5,7])|(15[^4,\\D])|(17[0,1,3,6-8])|(18[0-9])|(19[8,9])|(166))[0-9]{8}$";
var Regex_Email = @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
if(new Regex(Regex_phone).IsMatch(Target)){
var isExist = await _sysUserRep.DetachedEntities.AnyAsync(u => (u.Id != _userManager.UserId ) && (u.Account == Target || u.Phone == Target));
if (isExist) throw Oops.Oh("手机号与他人账号或者手机号重复");
}else if(new Regex(Regex_Email).IsMatch(Target))
{
var isExist3 = await _sysUserRep.DetachedEntities.AnyAsync(u => (u.Id != _userManager.UserId) && (u.Account == Target || u.Email == Target));
if (isExist3) throw Oops.Oh("邮箱与他人账号或者邮箱重复");
}
return true;
}
}
}