1
resposta

Retorno SignInManager.AuthenticationManager.GetExternalLoginInfoAsync é Null

Ao fazer a autenticação pelo google não é retornado os dados do usuario no callback.

ContaController

[HttpPost]
        public ActionResult RegistrarPorAutenticacaoExterna(string provider)
        {
            SignInManager.AuthenticationManager.Challenge(new AuthenticationProperties
            {
                RedirectUri = Url.Action("RegistrarPorAutenticacaoExternaCallback")
            }, provider);

            return new HttpUnauthorizedResult();
        }

        public async Task<ActionResult> RegistrarPorAutenticacaoExternaCallback()
        {
            var loginInfo = await SignInManager.AuthenticationManager.GetExternalLoginInfoAsync();

            var usuarioExistente = await UserManager.FindByEmailAsync(loginInfo.Email);
            if (usuarioExistente != null)
                return View("Error");

            var novoUsuario = new UsuarioAplicacao();

            novoUsuario.Email = loginInfo.Email;
            novoUsuario.UserName = loginInfo.Email;
            novoUsuario.NomeCompleto = loginInfo.ExternalIdentity.FindFirstValue(loginInfo.ExternalIdentity.NameClaimType);

            var resultado = await UserManager.CreateAsync(novoUsuario);
            if (resultado.Succeeded)
            {
                var resultadoAddLoginInfo = await UserManager.AddLoginAsync(novoUsuario.Id, loginInfo.Login);
                if (resultadoAddLoginInfo.Succeeded)
                    return RedirectToAction("Index", "Home");
            }
            return RedirectToAction("Error");
        }

Startup

builder.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            builder.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions
            {
                ClientId = ConfigurationManager.AppSettings["google:cliente_id"],
                ClientSecret = ConfigurationManager.AppSettings["google:client_secret"],
                Caption = "Google"
            });
1 resposta

Olá, Alexandre! Como vai?

Desculpe por demorar a te responder por aqui.

Espero que seu problema já tenha sido solucionado! De toda forma, vou deixar algumas orientações aqui, caso possam ser úteis.

Uma possível razão para você não estar recebendo os retornos do callback é que o retorno do método SignInManager.AuthenticationManager.GetExternalLoginInfoAsync() está sendo nulo. Isso pode acontecer se o usuário não concedeu permissão para o seu aplicativo acessar as informações dele no Google.

Para resolver esse problema, verifique se você configurou corretamente as permissões necessárias no Console de APIs do Google. Certifique-se de que você está solicitando as permissões corretas para acessar as informações do usuário, como o email.

Verifique também se você está passando corretamente o ClientId e o ClientSecret do seu aplicativo no código de configuração do GoogleAuthenticationOptions.

Por fim, certifique-se também de que você está redirecionando corretamente para a página de callback após a autenticação externa.

Espero que essas sugestões possam ser de alguma ajuda.

Abraços!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software