コード例 #1
0
 public virtual Task <TTenant> FindByTenancyNameAsync(string tenancyName)
 {
     return(TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenancyName));
 }
コード例 #2
0
 public virtual async Task <TTenant> FindByIdAsync(int id)
 {
     return(await TenantRepository.FirstOrDefaultAsync(id));
 }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
ファイル: LoginManager.cs プロジェクト: phamquang1/ql-cv
        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));
            }
        }
コード例 #5
0
        /// <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));
            }
        }