1
resposta

Erro de "System.NullReferenceException" ao tentar logar com a conta Google

Olá! Preciso de ajuda para solucionar o erro (System.NullReferenceException: 'Referência de objeto não definida para uma instância de um objeto.') que acontece ao tentar logar com a conta do Google.

*Este tópico é da aula de: "ASP.NET Identity parte 3: Autorização, autenticação externa com redes sociais"

Desde já, agradeço!

Segue o código em que dá erro:

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

            var signInResultado = await SignInManager.ExternalSignInAsync(loginInfo, true);

            if (signInResultado == SignInStatus.Success)
                return RedirectToAction("Index", "Home");

            return View("Error");
        }

Obs.: o valor de "loginInfo" é null;

1 resposta

Olá, Leandro

O erro System.NullReferenceException ocorre quando você está tentando acessar uma referência de objeto que não foi definida, ou seja, está nula. No seu caso, o valor de loginInfo está sendo retornado como null, o que está causando o erro.

Uma possível causa para isso é que o processo de autenticação externa com a conta do Google não está sendo realizado corretamente. Verifique se você configurou corretamente as chaves de API do Google no seu projeto e se está passando as informações corretas para o método GetExternalLoginInfoAsync().

Além disso, verifique se você está redirecionando corretamente para a página de autenticação externa do Google e se está recebendo o retorno corretamente após o login.

Uma sugestão para resolver o problema é verificar se o usuário está logado com a conta do Google antes de chamar o método GetExternalLoginInfoAsync(). Você pode fazer isso utilizando o método IsAuthenticated da propriedade User do Controller. Por exemplo:

public async Task<ActionResult> LoginPorAutenticacaoExternaCallback()
{
    if (User.Identity.IsAuthenticated)
    {
        var loginInfo = await SignInManager.AuthenticationManager.GetExternalLoginInfoAsync();

        var signInResultado = await SignInManager.ExternalSignInAsync(loginInfo, true);

        if (signInResultado == SignInStatus.Success)
            return RedirectToAction("Index", "Home");
    }

    return View("Error");
}

Dessa forma, você evita chamar o método GetExternalLoginInfoAsync() quando o usuário não está autenticado, o que pode estar causando o valor null em loginInfo.

Espero ter ajudado! Bons estudos!