Using Laravel Socialite to login to facebook Using Laravel Socialite to login to facebook laravel laravel

Using Laravel Socialite to login to facebook


In your composer.json add- "laravel/socialite": "~2.0",

"require": {        "laravel/framework": "5.0.*",        "laravel/socialite": "~2.0",

the run composer update

In config/services.php add:

//Socialite    'facebook' => [        'client_id'     => '1234567890444',        'client_secret' => '1aa2af333336fffvvvffffvff',        'redirect'      => 'http://laravel.dev/login/callback/facebook',    ],

You need to create two routes, mine are like these:

//Social LoginRoute::get('/login/{provider?}',[    'uses' => 'AuthController@getSocialAuth',    'as'   => 'auth.getSocialAuth']);Route::get('/login/callback/{provider?}',[    'uses' => 'AuthController@getSocialAuthCallback',    'as'   => 'auth.getSocialAuthCallback']);

You also need to create controller for the routes above like so:

<?php namespace App\Http\Controllers; use Laravel\Socialite\Contracts\Factory as Socialite; class AuthController extends Controller {       public function __construct(Socialite $socialite){           $this->socialite = $socialite;       }       public function getSocialAuth($provider=null)       {           if(!config("services.$provider")) abort('404'); //just to handle providers that doesn't exist           return $this->socialite->with($provider)->redirect();       }       public function getSocialAuthCallback($provider=null)       {          if($user = $this->socialite->with($provider)->user()){             dd($user);          }else{             return 'something went wrong';          }       } }

and finally add Site URL to your Facebook App like so:

enter image description here


Update 2018 - laravel 5.6 - socialite 3.0

It's little bit tricky for something that looks/should be easy, but anyway this is how i make things works for me.

Server side

you can find those instructions and more details in socialite docs

Installation

composer require laravel/socialite

Configuration

in config/services.php add

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

in .env file add

FACEBOOK_CLIENT_ID=paste_client_id_hereFACEBOOK_CLIENT_SECRET=paste_client_secret_hereFACEBOOK_CALLBACK_URL=https://www.example.com/auth/facebook/callback

in routes/web.php add

Route::get('auth/facebook/', 'Auth\FacebookController@redirect')->name('auth.facebook');Route::get('auth/facebook/callback', 'Auth\FacebookController@callback')->name('auth.facebook.callback');

in App\Http\Controllers\Auth add new controller FacebookController.php

<?phpnamespace App\Http\Controllers\Auth;use App\Http\Controllers\Controller;use Illuminate\Http\Request;use App\User;use Socialite;class FacebookController extends Controller {    /**     * Create a new controller instance.     *     * @return void     */    public function redirect()    {        return Socialite::driver('facebook')->redirect();    }    /**     * Create a new controller instance.     *     * @return void     */    public function callback(Request $request)    {        try {            $facebookAccount = Socialite::driver('facebook')->user();            // your logic here...            return redirect()->route('your.route.name');        } catch (Exception $e) {            return redirect()->route('auth.facebook');        }    }}

Facebook side

go to https://developers.facebook.com/apps and create new app (if you don't have one already)

and make sur your app settings are like below in those screen shots:

enter image description here

enter image description here

Important note

If you are developing in your local machine, you have to use tools like ngrok that provide a secure link to your localhost.

In the facebook login settings change https://www.example.com with the url provided by ngrok something like https://8b0215bc.ngrok.io.

It is the only way that worked for me while developing in my local machine.


Create a provider under your config/services.php file

'facebook' => [    'client_id' => 'your-fb-client-id',    'client_secret' => 'your-fb-secret',    'redirect' => 'http://your-redirect.com/route',],

now you can create a controller with following code

//this function will redirect users to facebook login pagepublic function facebook(){    return \Socialize::with('facebook')->redirect();}public function callback(){    $user = \Socialize::with('facebook')->user();    //now we have user details in the $user array     dd($user);}

and this is your route

Route::get('facebook', 'LoginController@facebook');Route::get('callback', 'LoginController@callback');