1
resposta

SignInManager.AuthenticationManager.GetExternalLoginInfoAsync é Null

Já tentei baixar novamente o projeto para ver se não foi algo que eu escrevi errado, mas mesmo assim ele está retornando null.

web.config:

    <add key="google:client_id" value="1075119104044-umddpnk728f6hli2kopnubn304orlad8.apps.googleusercontent.com" />
    <add key="google:client_secret" value="EgBSKjBwiXTn5pw4fmZSHgxR" />

Startup

builder.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

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

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 View("Error");
        }

View:

@using (Html.BeginForm("RegistrarPorAutenticacaoExterna", "Conta"))
{
    var providersAutenticacao = Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes();

    if (providersAutenticacao != null && providersAutenticacao.Any())
    {
        foreach (var provider in providersAutenticacao)
        {
            <button class="btn" type="submit" value="@provider.AuthenticationType" name="provider">
                @provider.Caption
            </button>
        }
    }
}
1 resposta

Estou com o mesmo problema. Alguém conseguiu resolver o problema do retorno null em chamar GetExternalLoginInfoAsync() ? Não consigo prosseguir com as aulas por causa deste retorno null. E diversas soluções apresentas na internet, não funcionaram.

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