public ActionResult <NGPResponse> ResetPassword([FromBody] ResetPasswordRequest request) { //获取人员Id var employee = _repository.FirstOrDefault <SysOrg_Employee>(s => s.LoginName == request.LoginName); // 用户不存在 if (employee == null) { return(NGPResponse.Create(Framework.Core.StatusCode.NotExistErrorOne, request.LoginName)); } var empId = employee.Id; // 验证码校验 var verItem = _repository.All <SysOrg_EmpVerification>(s => s.IsDelete == false && s.EmpId == empId).OrderByDescending(s => s.SendTime).FirstOrDefault(); // 验证码错误 if (verItem == null || !verItem.VerificationCode.Equals(request.VerificationCode)) { return(NGPResponse.Create(Framework.Core.StatusCode.VerificationCodeError)); } employee.Password = CommonHelper.Encrypt(request.Password); employee.InitUpdateDefaultFields(); _repository.Update(employee); _repository.SaveChanges(); return(Ok(NGPResponse.Create())); }
public ActionResult <NGPResponse> SendVerificationCode([FromBody] NGPSingleRequest userName) { // 数据库查询 var employee = _repository.FirstOrDefault <SysOrg_Employee>(s => s.LoginName == userName.RequestData); // 用户不存在 if (employee == null) { return(NGPResponse.Create(Framework.Core.StatusCode.NotExistErrorOne, userName.RequestData)); } // 用户被删除 if (employee.IsDelete) { return(NGPResponse.Create(Framework.Core.StatusCode.HasBeenDeletedError, userName.RequestData)); } //判断当前用户是否填写手机号 if (string.IsNullOrWhiteSpace(employee.PhoneNumber)) { return(NGPResponse.Create(Framework.Core.StatusCode.UserPhoneEmpty)); } var randomItem = new Random(); var verificationCode = Convert.ToString(randomItem.Next(100000, 999999)); // TODO 短信发送单列 var messageSend = Singleton <IEngine> .Instance.Resolve <IMobileMessageSend>(); messageSend.SendMessage(new MobileSendContext { Mobiles = new List <string> { employee.PhoneNumber }, Content = string.Format("您本次登录的验证码为【{0}】。", verificationCode) }); var insertItem = new SysOrg_EmpVerification { Id = CommonHelper.NewGuid(), EmpId = employee.Id, SendTime = DateTime.Now, VerificationCode = verificationCode, }; insertItem.CreatedBy = "System"; insertItem.CreatedTime = DateTime.Now; insertItem.CreatedArea = "32"; insertItem.CreatedCompany = "System"; insertItem.OrderIndex = 0; insertItem.UpdatedBy = "System"; insertItem.UpdatedTime = DateTime.Now; insertItem.UpdatedArea = "System"; insertItem.UpdatedCompany = "System"; insertItem.IsDelete = false; _repository.Insert(insertItem); _repository.SaveChanges(); return(Ok(NGPResponse.Create())); }
public async Task <ActionResult <NGPResponse> > UploadAuthFile(IFormFile formFile) { if (formFile.Length > 0) { // 创建划分的文件夹 var folderPath = _fileProvider.MapPath("authfile"); if (_fileProvider.DirectoryExists(folderPath)) { _fileProvider.DeleteDirectory(folderPath); } _fileProvider.CreateDirectory(folderPath); // 完整路径 var fullPath = Path.Combine(folderPath, formFile.FileName); using (var stream = System.IO.File.Create(fullPath)) { await formFile.CopyToAsync(stream); } } return(Ok(NGPResponse.Create())); }
/// <summary> /// Validates the resource owner password credential /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public Task ValidateAsync(ResourceOwnerPasswordValidationContext context) { var dtNow = DateTime.Now; // 人员验证 var employee = _unitRepository.FirstOrDefault <SysOrg_Employee>(s => s.LoginName == context.UserName && s.IsDelete == false); if (employee == null) { InsertLoginRecord(null, context.UserName); // "用户不存在!" // TODO context.Result.CustomResponse = NGPResponse.Create(StatusCode.UserNotExistOrDeleted).ToDictionary(); return(Task.CompletedTask); } if (employee.IsDelete) { InsertLoginRecord(null, context.UserName); context.Result.CustomResponse = NGPResponse.Create(StatusCode.HasDeleted).ToDictionary(); return(Task.CompletedTask); } //获取当前用户登录验证信息 var verificationInfo = _unitRepository.All <SysOrg_EmpVerification>(s => s.IsDelete == false && s.EmpId == employee.Id).OrderByDescending(s => s.SendTime).FirstOrDefault(); var verificationCode = string.Empty; if (context.Request.Raw.AllKeys.Contains("verification_code")) { verificationCode = context.Request.Raw["verification_code"]; } //用户已锁定 if (employee.IsLocking.HasValue && employee.IsLocking.Value) { //判断传参是否有验证码 if (!string.IsNullOrWhiteSpace(verificationCode)) { //判断验证码是否正确 if (verificationInfo != null && verificationCode == verificationInfo.VerificationCode) { employee.IsLocking = false; employee.FailureTimes = 0; } else { InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.WrongCode).ToDictionary(); return(Task.CompletedTask); } //获取时间差 var mins = dtNow.Subtract(verificationInfo.SendTime.Value).Minutes; //判断验证码是否失效 if (mins > 5) { InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.OverdueCode).ToDictionary(); return(Task.CompletedTask); } } else { //判断该账户是否绑定手机 if (string.IsNullOrEmpty(employee.PhoneNumber)) { InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.BeLocked).ToDictionary(); return(Task.CompletedTask); } else { InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.WarnRelieve).ToDictionary(); return(Task.CompletedTask); } } } //用户被禁用 if (employee.AccountStatus.HasValue && employee.AccountStatus == false) { InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.BeBaned).ToDictionary(); return(Task.CompletedTask); } // 密码不正确 if (!string.Equals(employee.Password, CommonHelper.Encrypt(context.Password), StringComparison.CurrentCulture)) { //判断登录失败次数是否已超过5次 if (employee.FailureTimes.HasValue && employee.FailureTimes.Value >= 4) { employee.IsLocking = true; } else { employee.FailureTimes = (employee.FailureTimes ?? 0) + 1; } _unitRepository.Update(employee); InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.WrongPassword).ToDictionary(); return(Task.CompletedTask); } //判断当前用户是否为白名单 if (!(employee.IsWhiteList.HasValue && employee.IsWhiteList.Value)) { //判断当前用户是否填写手机号 if (string.IsNullOrWhiteSpace(employee.PhoneNumber)) { InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.UnBindPhone).ToDictionary(); return(Task.CompletedTask); } //判断验证码是否正确 if (string.IsNullOrWhiteSpace(verificationCode)) { InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.PleaseSendVerification).ToDictionary(); return(Task.CompletedTask); } if (verificationInfo == null || !verificationCode.Equals(verificationInfo.VerificationCode)) { InsertLoginRecord(employee, context.UserName, false); InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.WrongCode).ToDictionary(); return(Task.CompletedTask); } else { //获取时间差 var minutes = dtNow.Subtract(verificationInfo.SendTime.Value).Minutes; //判断验证码是否失效 if (minutes > 5) { InsertLoginRecord(employee, context.UserName, false); context.Result.CustomResponse = NGPResponse.Create(StatusCode.OverdueCode).ToDictionary(); return(Task.CompletedTask); } } } // 添加claim ICollection <Claim> claims = new HashSet <Claim>(new ClaimComparer()) { // 用户id new Claim(JwtClaimTypes.Id, employee.Id), // 用户名(登录后显示用) new Claim(JwtClaimTypes.Name, employee.EmployeeName), // AreaId new Claim("ngp_area_id", employee.AreaId), // LoginName new Claim("ngp_login_name", employee.LoginName), }; // 添加公司id if (context.Request.Raw.AllKeys.Contains("company_id")) { claims.Add(new Claim("company_id", context.Request.Raw["company_id"])); } // 部门id if (!string.IsNullOrWhiteSpace(employee.DeptId)) { claims.Add(new Claim("ngp_dept_id", employee.DeptId)); } // 人员类别 if (!string.IsNullOrWhiteSpace(employee.EmployeeTypes)) { claims.Add(new Claim("ngp_employee_types", employee.EmployeeTypes)); } // 是否系统管理员 if (employee.IsSystemAdmin.HasValue) { claims.Add(new Claim("is_system_admin", employee.IsSystemAdmin.ToString())); } //身份类别 if (!string.IsNullOrWhiteSpace(employee.IdentityType)) { claims.Add(new Claim("ngp_identity_type", employee.IdentityType)); } // 用户角色 var roleEmpl = _unitRepository.FirstOrDefault <SysOrg_RoleEmpl>(s => s.EmplId == employee.Id && s.IsDelete == false); // 角色信息 if (roleEmpl != null) { claims.Add(new Claim("role_id", roleEmpl.RoleId)); var roleinfo = _unitRepository.FirstOrDefault <SysOrg_Role>(s => s.Id == roleEmpl.RoleId && s.IsDelete == false); if (roleinfo != null) { claims.Add(new Claim("role_type", roleinfo.RoleType)); } } employee.FailureTimes = 0; employee.SuccessTimes = (employee.SuccessTimes ?? 0) + 1; employee.LoginTime = DateTime.Now; _unitRepository.Update(employee); InsertLoginRecord(employee, context.UserName, true); context.Result = new GrantValidationResult( employee.LoginName, OidcConstants.AuthenticationMethods.Password, _clock.UtcNow.UtcDateTime, claims); context.Result.CustomResponse = NGPResponse.Create(StatusCode.Success).ToDictionary(); return(Task.CompletedTask); }