LogInManager.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System;
  2. using System.Threading.Tasks;
  3. using Abp.Dependency;
  4. using Abp.Domain.Repositories;
  5. using Abp.Domain.Uow;
  6. using Abp.Timing;
  7. using ShwasherSys.Authorization.Roles;
  8. using ShwasherSys.Authorization.Users;
  9. using IwbZero.Authorization;
  10. using IwbZero.Authorization.Users;
  11. using IwbZero.Configuration;
  12. using IwbZero.Helper;
  13. using IwbZero.Setting;
  14. using Microsoft.AspNet.Identity;
  15. using ShwasherSys.CompanyInfo;
  16. namespace ShwasherSys.Authorization
  17. {
  18. public class LogInManager : IwbLogInManager<SysRole,SysUser>
  19. {
  20. public LogInManager(
  21. UserManager userManager,
  22. IRepository<UserLoginAttempt, long> userLoginAttemptRepository,
  23. IUnitOfWorkManager unitOfWorkManager,
  24. IIwbSettingManager settingManager,
  25. IIwbUserManagementConfig userManagementConfig,
  26. IIocResolver iocResolver,
  27. RoleManager roleManager, IRepository<Employee> employeeRepository)
  28. :base(userManager,userLoginAttemptRepository,unitOfWorkManager,settingManager,userManagementConfig,iocResolver,roleManager)
  29. {
  30. EmployeeRepository = employeeRepository;
  31. }
  32. protected IRepository<Employee> EmployeeRepository { get; }
  33. protected override async Task<IwbLoginResult<SysUser>> CreateLoginResultAsync(SysUser user)
  34. {
  35. if (!user.IsActive)
  36. {
  37. return new IwbLoginResult<SysUser>(AbpLoginResultType.UserIsNotActive);
  38. }
  39. if (await IsEmailConfirmationRequiredForLoginAsync() && !user.IsEmailConfirmed)
  40. {
  41. return new IwbLoginResult<SysUser>(AbpLoginResultType.UserEmailIsNotConfirmed);
  42. }
  43. user.LastLoginTime = Clock.Now;
  44. await UserManager.UserStore.UpdateAsync(user);
  45. await UnitOfWorkManager.Current.SaveChangesAsync();
  46. return new IwbLoginResult<SysUser>(user, await UserManager.CreateIdentityAsync(user, ShwasherConsts.AuthenticationTypes)
  47. );
  48. }
  49. protected override async Task<IwbLoginResult<SysUser>> LoginAsyncInternal(string userNameOrEmailAddress, string plainPassword, bool shouldLockout)
  50. {
  51. if (userNameOrEmailAddress.IsEmpty())
  52. {
  53. throw new ArgumentNullException(nameof(userNameOrEmailAddress));
  54. }
  55. if (plainPassword.IsEmpty())
  56. {
  57. throw new ArgumentNullException(nameof(plainPassword));
  58. }
  59. using (UnitOfWorkManager.Current.SetTenantId(null))
  60. {
  61. var user = await UserManager.UserStore.FindByNameOrEmailAsync(null, userNameOrEmailAddress);
  62. if (user == null)
  63. {
  64. //打开注释可以用工号登入
  65. // string userName =(await EmployeeRepository.FirstOrDefaultAsync(a=>a.No==userNameOrEmailAddress))?.UserName;
  66. // user = userName.IsEmpty()
  67. // ? null
  68. // : await UserManager.UserStore.FindByNameOrEmailAsync(null, userName);
  69. if (user == null)
  70. {
  71. return new IwbLoginResult<SysUser>(AbpLoginResultType.InvalidUserNameOrEmailAddress);
  72. }
  73. }
  74. if (await UserManager.IsLockedOutAsync(user.Id))
  75. {
  76. return new IwbLoginResult<SysUser>(AbpLoginResultType.LockedOut, user);
  77. }
  78. UserManager.InitializeLockoutSettings();
  79. var verificationResult = UserManager.PasswordHasher.VerifyHashedPassword(user.Password, plainPassword);
  80. if (verificationResult == PasswordVerificationResult.Failed)
  81. {
  82. return await GetFailedPasswordValidationAsLoginResultAsync(user, shouldLockout);
  83. }
  84. if (verificationResult == PasswordVerificationResult.SuccessRehashNeeded)
  85. {
  86. return await GetSuccessRehashNeededAsLoginResultAsync(user);
  87. }
  88. await UserManager.ResetAccessFailedCountAsync(user.Id);
  89. return await CreateLoginResultAsync(user);
  90. }
  91. }
  92. }
  93. }