public async Task <TokenDTO> GoogleLogin([FromBody] GoogleLoginModel model)
        {
            if (_applicationConfiguration.DisableRegistration || _googleConfiguration.LoginDisabled)
            {
                throw new Exception("External login is disabled");
            }

            return(await _authService.GoogleLogin(model));
        }
예제 #2
0
        /// <inheritdoc />
        public async Task <TokenDTO> GoogleLogin(GoogleLoginModel model)
        {
            var payload = await VerifyGoogleToken(model);

            if (payload is null)
            {
                throw new ArgumentException("Google auth cannot be performed");
            }

            return(await CreateExternalUser(model.Provider, payload.Subject, payload.Email, payload.Name));
        }
예제 #3
0
        public async Task <IActionResult> GoogleSign(GoogleLoginModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    _accountService.SetCurrentContext(HttpContext, Url);
                    var response = await _accountService.GoogleLoginAsync(model);

                    _transactionHelper.CommitChanges();
                    return(Ok(response));
                }
                catch (Exception ex)
                {
                    _transactionHelper.RollBackChanges();
                    return(BadRequest(ex.Message));
                }
            }
            return(BadRequest(ModelState));
        }
예제 #4
0
        private async Task <GoogleJsonWebSignature.Payload> VerifyGoogleToken(GoogleLoginModel model)
        {
            try
            {
                var settings = new GoogleJsonWebSignature.ValidationSettings()
                {
                    Audience = new List <string>()
                    {
                        _googleConfiguration.ClientId
                    }
                };
                var payload = await GoogleJsonWebSignature.ValidateAsync(model.IdToken, settings);

                return(payload);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(null);
            }
        }
예제 #5
0
        public async Task <SigningInResponseModel> GoogleLoginAsync(GoogleLoginModel googleLoginModel)
        {
            if (string.IsNullOrEmpty(googleLoginModel.googleToken))
            {
                throw new Exception("token is null");
            }
            var googleUser = await _googleService.GetUserFromGoogleAsync(googleLoginModel.googleToken);

            if (googleUser == null)
            {
                throw new Exception("Invalid OAuth access token,cannot get google user");
            }

            var userLoginInfo = new UserLoginInfo(GlobalVariables.FacebookProviderName, googleUser.id, GlobalVariables.FacebookProviderDisplayName);
            var domainUser    = await _userManager.FindByLoginAsync(GlobalVariables.GoogleProviderName, googleUser.id);

            if (domainUser == null)
            {
                domainUser = await RegisterGoogleUser(googleUser);
            }
            return(GetSigningInResponseModel(domainUser, GlobalVariables.CustomerRole));
        }
예제 #6
0
        public async Task <IResponse> GoogleSignIn([FromBody] GoogleLoginModel googleLoginModel)
        {
            ExternalLoginResponse externalLoginResponse = new ExternalLoginResponse();

            externalLoginResponse.IsModelValid = ModelState.IsValid;
            if (ModelState.IsValid)
            {
                GoogleDataModel googleData = await GoogleAPI.GetUserLoginData(googleLoginModel.AccessToken);

                ExternalLoginInfo info = CustomExternalLoginInfo.FromLoginModel("Google", googleData);

                var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, true);

                externalLoginResponse.IsRegistered = result.Succeeded;
                externalLoginResponse.Result       = result;
            }
            else
            {
                externalLoginResponse.Errors = ModelState.Values.SelectMany(v => v.Errors.Select(b => b.ErrorMessage));
            }
            return(externalLoginResponse);
        }