Search code examples
phpfacebookfacebook-graph-apilaravellaravel-socialite

Using Laravel Socialite to login to facebook


I am new to Laravel however and I am following the tutorial on http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/, to login a user through Facebook into my application. However, almost everywhere I find a tutorial using either Github or Twitter for the Socialite Plugin provided in Laravel.

My problem is that on following everything in the tutorial, as I click on the "Login to Facebook" button, it throws an "Invalid Argument Exception" with No Socialite driver was specified.".

Another stack overflow question seemed to narrow things down: https://stackoverflow.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n

Stating that the problem is in the config/services.php

Now, i have the app_id and app_secret. However, the redirect link seems to be confusing as I can't find it on Facebook either. I am aware that this is where my app should go to Facebook for login, however, unsure of what it should be.

Does anyone have any idea on this.


Solution

  • 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 Login
    Route::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