Login com rede social usando Laravel Socialite
Tags: laravel, php, portugues, brasil
Published: 2020-10-25 17:05:06

Você já precisou ou pelo menos pensou em como seria implementar um sistema de login via rede social no seu sistema? Sim?! Então leia este post!

---

Estou aqui, sentado em frente a um computador, num domingo a  tarde. Tive vontade de escrever sobre o [Laravel Socialite](https://laravel.com/docs/8.x/socialite) depois de o ter conhecido essa semana.

Algo muito comum e que, pessoalmente, acho sensacional, é entrar num site e ao invés de se ter somente um formulário de trocentos campos, ter ali ao lado os botões de login via rede social.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/o18aj97chcigkjem9dci.png)

Há uns anos já precisei me aventurar a criar esses botões, depois fiquei muito tempo sem precisar realmente implementar sistemas como esses, porque não se encaixavam no negócio dos clientes que tive. Até que essa semana foi colocado diante de mim a tarefa de implementar este login via redes sociais num sistema em Laravel já em andamento. Fui ai que conheci o Laravel Socialite.

Me lembro de quando fiz essa tarefa da última vez, precisa configurar todas os detalhes da rede social que fosse utilizar. Era um tanto quanto trabalhoso!

Bem, o Laravel Socialite não é um projeto novo. Pelo que vi já está na ativa a quatro anos ou mais. Porém eu não o conhecia, como disse anteriormente, não precisei fazer esse tipo de coisa durante muito tempo.

---

Pelo próprio site do laravel você vai encontrar o [manual de instalação](https://laravel.com/docs/8.x/socialite). Seguindo o que está escrito, você vai precisar rodar o comando:

```ssh
composer require laravel/socialite
```

Você poderá conectar o seu site a diferentes redes sociais, por exemplo: github, google, facebook, twitter e um monte de outras. Vamos configurar o facebook nesse exemplo.

Vamos primeiramente registrar o nosso app de exemplo lá no [facebook developers](https://developers.facebook.com/apps). 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/yh06vn6aofmvmm407scu.png)

Clique em **Create App**, botão verde no canto superior direito.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/x9pdg81t0h5wekxuxlof.png)

Escolha **Build connected experiences**, clique em **Continue** e preencha os seus dados na próxima tela. Pra finalizar clique em **Create App**. Adicione um **Facebook login** nos produtos. Configure para aplicativo para web, defina sua url e **Next**.

Você vai precisar de duas informações para configurar o seu app: **App ID** e **App Secret**. Você vai adicionar as seguintes informações em *app/services.php*:

```php
'github' => [
    'client_id' => env('FACEBOOK_CLIENT_ID'),
    'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
    'redirect' => 'login/facebook/callback',
],
```

Aqueles informações que recuperamos lá no facebook, vamos colocar no *.env* agora. Veja que estamos usando duas informações ali no *services.php*: **FACEBOOK_CLIENT_ID**, **FACEBOOK_CLIENT_SECRET**.

Crie as seguintes rotas em: *routes/web.php*:

```php
Route::get('login/facebook', 'LoginController@redirectToProvider');
Route::get('login/facebook/callback', 'LoginController@handleProviderCallback');
```

No *LoginController.php*, adicione os dois métodos:

```php
public function redirectToProvider()
{
  return Socialite::driver('facebook')->redirect();
}

public function handleProviderCallback()
{
  $userData = Socialite::driver('facebook')->user();
  // $user = new User();
  // $user->email = $userData->getEmail();
  // $user->name = $userData->getName();
  // $user->provider_id = $userData->getId();
}
```

Bem, daqui pra frente você pode utilizar segundo suas necessidades! Você ainda pode [utilizar em apis](https://laravel.com/docs/8.x/socialite#stateless-authentication) ;) 

---

É isso! Espero que de alguma forma possa te ajudar como me ajudou. Até a próxima!