Esempio n. 1
0
        protected virtual async Task <AbpLoginResult <TTenant, TUser> > CreateLoginResultAsync(string name, TTenant tenant = null)
        {
            var user = await UserManager.FindByNameOrEmailAsync(name);

            if (!user.IsActive)
            {
                return(new AbpLoginResult <TTenant, TUser>(AbpLoginResultType.UserIsNotActive));
            }

            //if (await IsEmailConfirmationRequiredForLoginAsync(user.TenantId) && !user.IsEmailConfirmed)
            //{
            //    return new AbpLoginResult<TTenant, TUser>(AbpLoginResultType.UserEmailIsNotConfirmed);
            //}

            //if (await IsPhoneConfirmationRequiredForLoginAsync(user.TenantId) && !user.IsPhoneNumberConfirmed)
            //{
            //    return new AbpLoginResult<TTenant, TUser>(AbpLoginResultType.UserPhoneNumberIsNotConfirmed);
            //}

            user.LastLoginTime = Clock.Now;

            await UserManager.UpdateAsync(user);

            await UnitOfWorkManager.Current.SaveChangesAsync();

            var principal = await _claimsPrincipalFactory.CreateAsync(user);

            return(new AbpLoginResult <TTenant, TUser>(
                       tenant,
                       user,
                       principal.Identity as ClaimsIdentity
                       ));
        }
Esempio n. 2
0
        protected virtual async Task <ShaLoginResult <TTenant, TUser> > CreateLoginResultAsync(TUser user, TTenant tenant = null)
        {
            if (!user.IsActive)
            {
                return(new ShaLoginResult <TTenant, TUser>(ShaLoginResultType.UserIsNotActive));
            }

            if (await IsEmailConfirmationRequiredForLoginAsync(user.TenantId) && !user.IsEmailConfirmed)
            {
                return(new ShaLoginResult <TTenant, TUser>(ShaLoginResultType.UserEmailIsNotConfirmed));
            }

            if (await IsPhoneConfirmationRequiredForLoginAsync(user.TenantId) && !user.IsPhoneNumberConfirmed)
            {
                return(new ShaLoginResult <TTenant, TUser>(ShaLoginResultType.UserPhoneNumberIsNotConfirmed));
            }

            var principal = await _claimsPrincipalFactory.CreateAsync(user);

            return(new ShaLoginResult <TTenant, TUser>(
                       tenant,
                       user,
                       principal.Identity as ClaimsIdentity
                       ));
        }
        public async Task <RefreshTokenResult> RefreshToken(string refreshToken)
        {
            if (string.IsNullOrWhiteSpace(refreshToken))
            {
                throw new ArgumentNullException(nameof(refreshToken));
            }

            if (!IsRefreshTokenValid(refreshToken, out var principal))
            {
                throw new ValidationException("Refresh token is not valid!");
            }

            try
            {
                var user = _userManager.GetUser(UserIdentifier.Parse(principal.Claims.First(x => x.Type == AppConsts.UserIdentifier).Value));
                if (user == null)
                {
                    throw new UserFriendlyException("Unknown user or user identifier");
                }

                principal = await _claimsPrincipalFactory.CreateAsync(user);

                var accessToken = CreateAccessToken(await CreateJwtClaims(principal.Identity as ClaimsIdentity, user));

                return(await Task.FromResult(new RefreshTokenResult(accessToken, GetEncryptedAccessToken(accessToken), (int)_configuration.AccessTokenExpiration.TotalSeconds)));
            }
            catch (UserFriendlyException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new ValidationException("Refresh token is not valid!", e);
            }
        }
        public async Task <AuthenticateResultModel> Switching(long id)
        {
            var tenant = await this._tenantRepository.GetAll().IgnoreQueryFilters().FirstOrDefaultAsync(o => o.Id == id && !o.IsDeleted && o.IsActive);

            AbpLoginResult <Tenant, User> loginResult;

            if (tenant == null)
            {
                loginResult = new AbpLoginResult <Tenant, User>(AbpLoginResultType.UserIsNotActive);
            }
            else
            {
                var user = await this._userRepository.GetAll().IgnoreQueryFilters().FirstAsync(o => o.UserName == "admin" && o.TenantId == tenant.Id);

                var principal = await _claimsPrincipalFactory.CreateAsync(user);

                loginResult = new AbpLoginResult <Tenant, User>(
                    tenant,
                    user,
                    principal.Identity as ClaimsIdentity
                    );
            }
            var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity, loginResult.Tenant));

            return(new AuthenticateResultModel
            {
                AccessToken = accessToken,
                EncryptedAccessToken = GetEncrpyedAccessToken(accessToken),
                ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds,
                UserId = loginResult.User.Id
            });
        }