using System; using System.Threading.Tasks; using Abp.Dependency; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.Timing; using ShwasherSys.Authorization.Roles; using ShwasherSys.Authorization.Users; using IwbZero.Authorization; using IwbZero.Authorization.Users; using IwbZero.Configuration; using IwbZero.Helper; using IwbZero.Setting; using Microsoft.AspNet.Identity; using ShwasherSys.CompanyInfo; namespace ShwasherSys.Authorization { public class LogInManager : IwbLogInManager { public LogInManager( UserManager userManager, IRepository userLoginAttemptRepository, IUnitOfWorkManager unitOfWorkManager, IIwbSettingManager settingManager, IIwbUserManagementConfig userManagementConfig, IIocResolver iocResolver, RoleManager roleManager, IRepository employeeRepository) :base(userManager,userLoginAttemptRepository,unitOfWorkManager,settingManager,userManagementConfig,iocResolver,roleManager) { EmployeeRepository = employeeRepository; } protected IRepository EmployeeRepository { get; } protected override async Task> CreateLoginResultAsync(SysUser user) { if (!user.IsActive) { return new IwbLoginResult(AbpLoginResultType.UserIsNotActive); } if (await IsEmailConfirmationRequiredForLoginAsync() && !user.IsEmailConfirmed) { return new IwbLoginResult(AbpLoginResultType.UserEmailIsNotConfirmed); } user.LastLoginTime = Clock.Now; await UserManager.UserStore.UpdateAsync(user); await UnitOfWorkManager.Current.SaveChangesAsync(); return new IwbLoginResult(user, await UserManager.CreateIdentityAsync(user, ShwasherConsts.AuthenticationTypes) ); } protected override async Task> LoginAsyncInternal(string userNameOrEmailAddress, string plainPassword, bool shouldLockout) { if (userNameOrEmailAddress.IsEmpty()) { throw new ArgumentNullException(nameof(userNameOrEmailAddress)); } if (plainPassword.IsEmpty()) { throw new ArgumentNullException(nameof(plainPassword)); } using (UnitOfWorkManager.Current.SetTenantId(null)) { var user = await UserManager.UserStore.FindByNameOrEmailAsync(null, userNameOrEmailAddress); if (user == null) { //打开注释可以用工号登入 // string userName =(await EmployeeRepository.FirstOrDefaultAsync(a=>a.No==userNameOrEmailAddress))?.UserName; // user = userName.IsEmpty() // ? null // : await UserManager.UserStore.FindByNameOrEmailAsync(null, userName); if (user == null) { return new IwbLoginResult(AbpLoginResultType.InvalidUserNameOrEmailAddress); } } if (await UserManager.IsLockedOutAsync(user.Id)) { return new IwbLoginResult(AbpLoginResultType.LockedOut, user); } UserManager.InitializeLockoutSettings(); var verificationResult = UserManager.PasswordHasher.VerifyHashedPassword(user.Password, plainPassword); if (verificationResult == PasswordVerificationResult.Failed) { return await GetFailedPasswordValidationAsLoginResultAsync(user, shouldLockout); } if (verificationResult == PasswordVerificationResult.SuccessRehashNeeded) { return await GetSuccessRehashNeededAsLoginResultAsync(user); } await UserManager.ResetAccessFailedCountAsync(user.Id); return await CreateLoginResultAsync(user); } } } }