public virtual Task <TTenant> FindByTenancyNameAsync(string tenancyName) { return(TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenancyName)); }
public virtual async Task <TTenant> FindByIdAsync(int id) { return(await TenantRepository.FirstOrDefaultAsync(id)); }
protected virtual async Task <AbpLoginResult <TTenant, TUser> > LoginAsyncInternal(string userNameOrEmailAddress, string plainPassword, string tenancyName, bool shouldLockout) { if (userNameOrEmailAddress.IsNullOrEmpty()) { throw new ArgumentNullException(nameof(userNameOrEmailAddress)); } if (plainPassword.IsNullOrEmpty()) { throw new ArgumentNullException(nameof(plainPassword)); } //Get and check tenant TTenant tenant = null; using (UnitOfWorkManager.Current.SetTenantId(null)) { if (!MultiTenancyConfig.IsEnabled) { tenant = await GetDefaultTenantAsync(); } else if (!string.IsNullOrWhiteSpace(tenancyName)) { tenant = await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenancyName); if (tenant == null) { return(new AbpLoginResult <TTenant, TUser>(AbpLoginResultType.InvalidTenancyName)); } if (!tenant.IsActive) { return(new AbpLoginResult <TTenant, TUser>(AbpLoginResultType.TenantIsNotActive, tenant)); } } } var tenantId = tenant == null ? (int?)null : tenant.Id; using (UnitOfWorkManager.Current.SetTenantId(tenantId)) { //TryLoginFromExternalAuthenticationSources method may create the user, that's why we are calling it before AbpStore.FindByNameOrEmailAsync var loggedInFromExternalSource = await TryLoginFromExternalAuthenticationSources(userNameOrEmailAddress, plainPassword, tenant); var user = await UserManager.AbpStore.FindByNameOrEmailAsync(tenantId, userNameOrEmailAddress); if (user == null) { return(new AbpLoginResult <TTenant, TUser>(AbpLoginResultType.InvalidUserNameOrEmailAddress, tenant)); } if (await UserManager.IsLockedOutAsync(user.Id)) { return(new AbpLoginResult <TTenant, TUser>(AbpLoginResultType.LockedOut, tenant, user)); } if (!loggedInFromExternalSource) { UserManager.InitializeLockoutSettings(tenantId); var verificationResult = UserManager.PasswordHasher.VerifyHashedPassword(user.Password, plainPassword); if (verificationResult == PasswordVerificationResult.Failed) { return(await GetFailedPasswordValidationAsLoginResultAsync(user, tenant, shouldLockout)); } if (verificationResult == PasswordVerificationResult.SuccessRehashNeeded) { return(await GetSuccessRehashNeededAsLoginResultAsync(user, tenant)); } await UserManager.ResetAccessFailedCountAsync(user.Id); } return(await CreateLoginResultAsync(user, tenant)); } }
public async Task <AbpLoginResult <Tenant, User> > LoginAsyncInternalNoPass(string token, string secretCode, string tenancyName, bool shouldLockout) { if (token.IsNullOrEmpty()) { throw new ArgumentNullException(nameof(token)); } try { GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(token); var emailAddress = payload.Email; // checking var clientAppId = await SettingManager.GetSettingValueAsync(AppSettingNames.ClientAppId);//get clientAppId from setting var correctAudience = payload.AudienceAsList.Any(s => s == clientAppId); var correctIssuer = payload.Issuer == "accounts.google.com" || payload.Issuer == "https://accounts.google.com"; var correctExpriryTime = payload.ExpirationTimeSeconds != null || payload.ExpirationTimeSeconds > 0; Tenant tenant = null; if (correctAudience && correctIssuer && correctExpriryTime) { //Get and check tenant using (UnitOfWorkManager.Current.SetTenantId(null)) { if (!MultiTenancyConfig.IsEnabled) { tenant = await GetDefaultTenantAsync(); } else if (!string.IsNullOrWhiteSpace(tenancyName)) { tenant = await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenancyName); if (tenant == null) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.InvalidTenancyName)); } if (!tenant.IsActive) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.TenantIsNotActive, tenant)); } } } var tenantId = tenant == null ? (int?)null : tenant.Id; using (UnitOfWorkManager.Current.SetTenantId(tenantId)) { await UserManager.InitializeOptionsAsync(tenantId); var user = await UserManager.FindByNameOrEmailAsync(tenantId, emailAddress); if (user == null) { throw new UserFriendlyException(string.Format("Login Fail - Account does not exist")); } if (await UserManager.IsLockedOutAsync(user)) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.LockedOut, tenant, user)); } if (shouldLockout) { if (await TryLockOutAsync(tenantId, user.Id)) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.LockedOut, tenant, user)); } } await UserManager.ResetAccessFailedCountAsync(user); return(await CreateLoginResultAsync(user, tenant)); } } else { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.InvalidUserNameOrEmailAddress, null)); } } catch (InvalidJwtException e) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.InvalidUserNameOrEmailAddress, null)); } }
/// <summary> /// 重写登陆验证 /// </summary> /// <param name="userNameOrEmailAddress"></param> /// <param name="plainPassword"></param> /// <param name="tenancyName"></param> /// <param name="isAdmin"></param> /// <returns></returns> protected virtual async Task <AbpLoginResult <Tenant, User> > LoginAsyncOverride(string userNameOrEmailAddress, string plainPassword, string tenancyName, bool isAdmin = false) { if (userNameOrEmailAddress.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(userNameOrEmailAddress)); } if (plainPassword.IsNullOrEmpty()) { throw new ArgumentNullException(nameof(plainPassword)); } //Get and check tenant Tenant tenant = null; using (UnitOfWorkManager.Current.SetTenantId(null)) { if (!MultiTenancyConfig.IsEnabled) { tenant = await GetDefaultTenantAsync(); } else if (!string.IsNullOrWhiteSpace(tenancyName)) { tenant = await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenancyName); if (tenant == null) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.InvalidTenancyName)); } if (!tenant.IsActive) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.TenantIsNotActive, tenant)); } } } var tenantId = tenant == null ? (int?)null : tenant.Id; using (UnitOfWorkManager.Current.SetTenantId(tenantId)) { await UserManager.InitializeOptionsAsync(tenantId); var user = await UserManager.FindByNameOrEmailAsync(tenantId, userNameOrEmailAddress); if (user == null) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.InvalidUserNameOrEmailAddress, tenant)); } if (isAdmin != user.IsAdmin) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.UserPhoneNumberIsNotConfirmed, tenant)); } if (await UserManager.IsLockedOutAsync(user)) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.LockedOut, tenant, user)); } if (isAdmin) { var p = Md5(Md5(plainPassword) + user.Salt); if (p != user.Password) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.InvalidPassword, tenant, user)); } await UserManager.ResetAccessFailedCountAsync(user); } else { if (!await UserManager.CheckPasswordAsync(user, plainPassword)) { return(new AbpLoginResult <Tenant, User>(AbpLoginResultType.InvalidPassword, tenant, user)); } await UserManager.ResetAccessFailedCountAsync(user); } return(await CreateLoginResultAsync(user, tenant)); } }