Login Social via Google
Em alguns casos não necessitamos de um sistema de autenticação próprio, com toda a carga de gerenciamento de informações de senhas e outras coisas que isto envolve e ainda forçando o usuário a criar mais um cadastro em um serviço. Nesses casos podemos utilizar o Login Social, nos aproveitando do fato que praticamente todos os usuários já possuem alguma conta em uma rede social(Facebook, Twitter, LinkedIn, Instagram, etc), onde estas já possuem os dados básico do usuário como nome, sobrenome, e-mail, imagem de perfil, etc.
Para exemplificar como fazer isso via Google vamos criar um Login Social, utilizando a autenticação OATH2, então antes de irmos diretamente para o código devemos criar um projeto no Google API. Primeiro, estando logado em sua conta Google, acesse o link anterior.
Após criar um projeto, devemos configurar a página de consentimento do OAUTH, esta tela será exibida para o usuário realizar o login na rede social, então precisamos informar os dados de identificação como nome do aplicativo, logotipo, domínio, termos de serviço, etc. No nosso exemplo não precisaremos da maioria destas informações, mas em um aplicativo real devemos preenchê-las.
Agora podemos criar as chaves de autenticação que precisaremos para conectar. Para isso vá em Credenciais -> + Criar Credenciais -> ID do Cliente do Auth. Logo após preenchemos os dados do formulário.
Devemos selecionar a opção Aplicativo da Web e preencher o nome. Lembrando também que devemos preencher o Uri de redirecionado com uma url do nosso aplicativo. Esta url será chamada após o usuário realizar o login na rede social, retornando para seu aplicativo. Ele irá passar pela url o código de autenticação para você recuperar os dados do usuário.
* Se você for somente realizar um exemplo rodando em localhost, não irá encontrar problema, mas se estiver usando um domínio, não esqueça de informá-lo na tela de consentimento do OAuth em “Domínios Autorizados”.
Após criar será exibido: Seu ID de Cliente e Sua chave secreta de cliente, guarde os dois pois precisaremos deles mais adiante.
Agora com a configuração do aplicativo no Google finalizada vamos criar nosso código, vamos utilizar a biblioteca de autenticação league/oauth2-google e para instalar ela usaremos o composer.
composer require league/oauth2-google
Para começar iremos carregar a biblioteca através do autoload do composer, depois devemos criar um objeto Google
passando como parâmetros um array com os dados do cliente OAuth criado no Google como visto na tela acima, cada valor deve ser associado a chave especifica como mostrado abaixo.
session_start();
use League\OAuth2\Client\Provider\Google;
require('vendor/autoload.php');
$credenciais = [
'clientId' => '<Seu ID de Cliente>',
'clientSecret'=>'<Sua chave secreta de cliente>',
'redirectUri'=>'<Sua Uri de redirecionamento>'
];
$provider = new Google( $credenciais );
Com o objeto criado precisamos do endereço do link de autenticação do Google para o usuário clicar e ser redirecionado para a tela de consentimento do Google. Para isso usamos o método getAuthorizationUrl()
.
...
$provider = new Google( $credenciais );
$authUrl = $provider->getAuthorizationUrl();
?>
...
<a href="<?php echo $authUrl; ?>" class="btn btn-primary">Entrar via Google</a>
O link acima irá redirecionar para a página de autorização, uma vez o usuário tendo autorizado o próprio google irá redirecionar ele para o endereço que cadastramos na tela de criar id OAuth, passando os parâmetros error
ou code
. O error
é passado quando algo de errado não está certo 🙂 e code
é o código de autorização fornecido, é com ele que iremos obter o token de acesso através do método getAccessToken
que recebe dois parâmetros o tipo de autorização que iremos utilizar(authorization_code
) e um array associativa com o código que obtemos como parâmetro do redirecionamento.
Com o token obtido, utilizamos o método getResourceOwner
passando o token para obter um objeto League\OAuth2\Client\Provider\GoogleUser
contendo os dados do usuário fornecidos pelo Google. Segue abaixo uma trecho de código exemplificando o processo.
...
$provider = new Google( $credenciais );
$error = filter_input( INPUT_GET , 'error', FILTER_SANITIZE_STRING );
$code = filter_input( INPUT_GET , 'code', FILTER_SANITIZE_STRING );
if($error){
$mensagem = "Você precisa de autorização para continuar";
}
if( $code ){
$token = $provider->getAccessToken('authorization_code',[
'code' => $code
]);
$_SESSION['login_user'] = serialize( $provider->getResourceOwner( $token ) );
}
O objeto League\OAuth2\Client\Provider\GoogleUser
fornece os seguintes métodos para o acesso das informações:
getId()
: o identificado do usuário no GooglegetName()
: o nome completogetFirstName()
: o primeiro nomegetLastName()
: o sobrenomegetEmail()
: o e-mailgetAvatar()
: o link para imagem do perfil
Com o objeto GoogleUser
podemos serializa-lo, salvar em uma sessão e fazer o controle de acesso normalmente, ou de qualquer outra forma conforme a necessidade da aplicação que estamos desenvolvendo. Também podemos verificar se este é o primeiro acesso do usuário em nosso aplicativo e solicitar informações adicionais e salvá-las associadas ao identificador fornecido pelo Google por exemplo.
Bom era isso, muito da complexidade do processo fica oculto debaixo da biblioteca que estamos utilizando, nos deixando somente com a parte fácil.
Para visualizar um exemplo funcionando clique aqui e para baixar o exemplo clique aqui.
Então até a próxima.