예제 #1
0
        public async Task <UserProfileViewModel> GetByEmail(string email)
        {
            var accountFilter = Builders <Account> .Filter.Eq("Email", email);

            var account = await accountRepository.FindAsync(accountFilter);

            var userFilter = Builders <User> .Filter.Eq("email", email);

            var user = await userRepository.FindAsync(userFilter);

            var userViewModel = mapper.Map <UserViewModel>(user);

            var externalFilter = Builders <ExternalLogin> .Filter.Eq("email", email);

            var external = await externalLoginRepository.FindAsync(externalFilter);

            var result = new UserProfileViewModel()
            {
                Account       = account,
                ExternalLogin = external,
                User          = userViewModel
            };

            return(result);
        }
예제 #2
0
        /// <summary>
        /// Externals the login.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="ipAddress">The ip address.</param>
        /// <returns></returns>
        public async Task <object> ExternalLogin(GoogleAuthenticationRequest request, string ipAddress)
        {
            var internalUserFilter = Builders <User> .Filter.Eq("email", request.User.Email);

            var existInternalUser = await userRepository.FindAsync(internalUserFilter);

            if (existInternalUser != null)
            {
                var finder = Builders <ExternalLogin> .Filter.Eq("email", request.User.Email);

                var existExternalLogin = await externalLoginRepository.FindAsync(finder);

                if (existExternalLogin == null)
                {
                    var externalLogin = new ExternalLogin()
                    {
                        Email         = request.User.Email,
                        LoginProvider = Constants.ExternalLoginConstants.GOOGLE_EXTERNAL_PROVIDER
                    };

                    await externalLoginRepository.AddAsync(externalLogin);
                }

                Account account = accountRepository.GetAll().FirstOrDefault(x => x.Email == existExternalLogin.Email);

                string       jwtToken     = accountService.generateJwtToken(account);
                RefreshToken refreshToken = accountService.generateRefreshToken(ipAddress);
                account.RefreshTokens.Add(refreshToken);
                accountService.removeOldRefreshTokens(account);

                accountRepository.Update(account, account.Id);

                AuthenticateResponse response = mapper.Map <AuthenticateResponse>(account);
                response.JwtToken     = jwtToken;
                response.RefreshToken = refreshToken.Token;
                return(response);
            }
            else
            {
                return(request);
            }
        }
        public async Task <ApplicationUser> FindAsync(UserLoginInfo login)
        {
            var externalUser = await _externalLoginRepository.FindAsync(login.LoginProvider, login.ProviderKey);

            return(externalUser?.User);
        }