Laravel 5 – Laravel Socialite 15

Fala galera faz um tempo que não escrevo um post, porém, é por falta de tempo mesmo.

Bom hoje eu gostaria de falar com vocês sobre algo que eu achei muito útil no Laravel 5 que é o:

  • Laravel Socialite

Para alguns desenvolvedores que já caíram na situação em que você tem um aplicativo, por exemplo, que precisa realizar o Famoso OAuth dos nossos camaradas:

  • Facebook
  • Twitter
  • Google
  • GitHub
  • Bitbucket

Já devem ter perdido pelo menos algumas horas para deixar tudo redondo não é ?

No Laravel 5 podemos contar com esse recurso de fácil implementação e também de fácil utilização.

Primeiramente o que nós precisamos é adicionar o Socialite em nosso Laravel, pois o mesmo não vem instalado por default, abra seu arquivo:

  • composer.json

E agora adicione o Socialite em Require:

“require”: {
“laravel/framework”: “5.0.*”,
“laravel/socialite”: “~2.0”
}

Agora execute o comando:

composer update – Atenção o update irá instalar o Socialite e também atualizar suas bibliotecas.

O que precisamos fazer nesse momento é informar ao Laravel em seu config que o Socialite existe, basta você adicionar ao array de providers e de aliases:

  • Em providers adicione dessa forma:

'Laravel\Socialite\SocialiteServiceProvider',

  • Em aliases adicione dessa forma:

'Socialize' => 'Laravel\Socialite\Facades\Socialite',

Irei usar como exemplo um aplicativo do Facebok, para criar o seu aplicativo Facebook acesse o link:

https://developers.facebook.com/ – Na esqueça de configurar a URL do seu site no aplicativo.

No meu caso eu criei um aplicativo chamado: teste.

Feito isso entre em seu aplicativo e obtenha o seu: App ID e seu APP Secret, no caso do App Secret clique no botão mostrar e copie seu conteúdo, utilizaremos o App ID e o APP Secret para configurar o que faremos a seguir.

Agora precisamos informar ao Laravel sobre essas configurações no arquivo:

  • config/services.php

Após o stripe adicione as configurações de seu aplicativo:


'facebook' => [
   'client_id' => env('FACEBOOK_CLIENT_ID'),
   'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
   'redirect' => env('FACEBOOK_REDIRECT'),
],

Como vocês podem ver eu coloquei minhas configurações no meu arquivo: .env, segue exemplo:

  • FACEBOOK_CLIENT_ID=seu cliente id
  • FACEBOOK_CLIENT_SECRET=sua chave
  • FACEBOOK_REDIRECT=sua url de redirecionamento – usarei como exemplo essa: http://seusite.com.br/facebook

Agora irei criar em nosso arquivo de rota, duas rotas para podermos testar nosso login que são as:

  • loginFacebook – GET
  • facebook – GET

Exemplo das rotas no arquivo:

  • app/Http/route.php

Route::get('loginFacebook', [email protected]');
Route::get('facebook', [email protected]');

Você também deverá criar a controller que será responsável por efetuar o login no Facebook e também por exibir os dados do usuário logado, crie a controller em:

  • app/Http/Controllers/FacebookController.php

Segue o código do FacebookController com seus métodos:


<?php

namespace App\Http\Controllers;

class FacebookController extends Controller
{

    public function login()
    {
        return \Socialize::with('facebook')->redirect();
    }

    public function pageFacebook()
    {
        $user = \Socialize::with('facebook')->user();
        return response()->json($user);
    }

}

No método login é obtido a chave facebook onde contém nossas configurações do serviço.

Com isso o Laravel\Socialite irá verificar o login do usuário com o nosso aplicativo teste, caso não esteja logado, será efetuada uma tentativa de login e caso já esteja conectado nós seremos redirecionados para a nossa rota:

  • http://seusite.com.br/facebook.


Na rota facebook eu coloquei uma resposta em Json com os dados do usuário conectado, porém o Laravel Socialite fornece alguns métodos úteis que são os:

  • getId()
  • getNickName()
  • getName()
  • getEmail()
  • getAvatar()

Galera eu espero ter ajuda e caso vocês tenham alguma dúvida, por favor, postem que assim que possível tentarei responder.

Um grande abraço a todos.

  • http://vedovelli.com.br/ vedovelli

    Muito bom! Simples e direto, bem no estilo Laravel! Forte abraço e obrigado

    • Michael Douglas

      Vedovelli,

      Obrigado pelo comentário @vedovelli:disqus

  • Carlos Encine

    Muito bom vou começar a usar em minhas aplicações

    • Michael Douglas

      Carlos,

      Obrigado pelo incentivo @carlosencine:disqus

  • João Mello

    Este mesmo código serve para Github, Twitter e Google?

    Estava pensando em fazer um controller para estes, tipo

    SocialCtrl

    class SocialCtrl extends Controller
    {
    public function login($provider)
    {
    return Socialize::with($provider)->redirect();
    }
    public function loginSocial($provider)
    {
    $user = Socialize::with($provider)->user();

    return response()->json($user);
    }
    }

    • Michael Douglas

      João,

      O código em questão eu fiz os env para o Facebook, no caso você por globalizar a configuração e usar o seu controller normalmente.

      • João Mello

        Está funcionando bem, mas não estou conseguindo autenticar o usuário logo após o cadastro e ainda tenho que fazer uma verificação se o user já existe caso sim já faz o login.
        public function login($provider)
        {
        return Socialize::with($provider)->redirect();
        }

        public function authorize($provider)
        {
        $user = Socialize::with($provider)->user();
        // return response()->json($user);
        // dd($user[‘name’]);
        // return view(‘welcome’);

        $cliente = new User;
        $cliente->name = $user[‘name’];
        $cliente->slug = Str::slug($user[‘name’]);
        $cliente->email = $user[‘email’];
        // $cliente->image = $user[‘avatar_url’];
        $cliente->password = bcrypt(‘temp’); //senha temporária
        $cliente->save();

        $cliente = Auth::user(); //Tento autenticar mas não vai

        return Redirect::intended();
        }

        • Aurélio Guedes

          Olá, estou a procura de uma solução como esta que você também está atrás. Preciso logar o usuário e salvar as informações no banco de dados caso seja a primeira vez que realiza autenticação com o serviço. Mas sinceramente, não sei como fazer isto.

          • Michael Douglas

            Aproveitando galera, irei tirar um tempo e fazer uma segunda parte do post com a solução desse problema que vocês estão comentando :)

          • Andre Felipe Azevedo

            Cara, sobre salvar as informações no BD, é só deixar o campo ‘email’ do banco de dados como unique, no controller você faz o teste se o email existir faz o login se nao faz o cadastro.

  • Rodrigo Brandão

    ClientException in Middleware.php line 68:Client error: 400
    Para mim não deu certo

  • Willians Pereira

    No caso, quando eu clico em “cancelar” me retorna um erro (cliente 400), como posso contornar essa situação?

  • Leandro Ramos

    Bom dia.
    O Socialite serve para me autenticar em outros servidores também? Trabalho numa universidade que usa o OAuth 1, e não consigo me autenticar com o Laravel de jeito nenhum :(
    Consigo com alguns CMS, mas no Laravel não rolou direito. Tem alguma dica?

    Obrigado!

  • Guilherme

    Olá pessoal! Comecei com Laravel recentemente e peguei esse excelente POST para poder aprender a usar a framework.

    Na minha máquina rodou perfeito, mas quando transfiro para o servidor, na hora que o usuário vai tentar login retorna:

    Fatal error: Class ‘LaravelSocialiteFacadesSocialite’ not found

    já tentei de tudo! Sei que aqui não é fórum, mas alguem sabe o que fazer?

    • Lucas Reis

      Você deu composer update no seu server? Talvez as dependências do socialite não estejam lá.

      se tiver tudo importado certinho, tenta “composer dump-autoload”.