web-dev-qa-db-fra.com

Utiliser Laravel Socialite pour se connecter à Facebook

Cependant, je suis nouveau à Laravel et je suis le tutoriel sur http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/ , pour connecter un utilisateur via Facebook à mon application. Cependant, presque partout, je trouve un tutoriel utilisant Github ou Twitter pour le plugin Socialite fourni dans Laravel.

Mon problème est que, après avoir tout suivi dans le tutoriel, lorsque je clique sur le bouton "Connexion à Facebook", une "exception d'argument non valide" est générée, sans qu'aucun pilote ne soit spécifié dans Socialite. ".

Une autre question de débordement de pile semblait préciser les choses: https://stackoverflow.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n

Indiquer que le problème est dans le fichier config/services.php

Maintenant, j'ai les app_id et app_secret. Cependant, le lien de redirection semble être déroutant car je ne le trouve pas non plus sur Facebook. Je suis conscient que c'est là que mon application devrait aller sur Facebook pour la connexion, mais je ne suis pas sûre de ce qu'elle devrait être.

Quelqu'un a-t-il une idée à ce sujet?.

15
Namit

Dans votre composer.json add- "laravel/socialite": "~2.0",

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

la course composer update

Dans config/services.php add:

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

Vous devez créer deux itinéraires, les miens sont comme ceux-ci:

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


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

Vous devez également créer un contrôleur pour les routes ci-dessus, comme ceci:

<?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';
          }
       }

 }

et ajoutez enfin l'URL du site à votre application Facebook comme suit:

enter image description here

39
Digitlimit

Mise à jour 2018 - Laravel 5.6 - Socialite 3.0

C'est un peu difficile pour quelque chose qui semble/devrait être facile, mais de toute façon, c'est comme ça que je fais en sorte que les choses fonctionnent pour moi.

Du côté serveur

vous pouvez trouver ces instructions et plus de détails dans docs socialite

Installation

composer require laravel/socialite

Configuration

dans config/services.php add 

'facebook' => [

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

dans le fichier .env add 

FACEBOOK_CLIENT_ID=paste_client_id_here
FACEBOOK_CLIENT_SECRET=paste_client_secret_here
FACEBOOK_CALLBACK_URL=https://www.example.com/auth/facebook/callback

dans 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');

dans App\Http\Controllers\Auth ajouter un nouveau contrôleur FacebookController.php

<?php

namespace 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');
        }
    }
}

Côté Facebook

allez à https://developers.facebook.com/apps et créez une nouvelle application (si vous n'en avez pas déjà une)

et assurez-vous que les paramètres de votre application sont comme ci-dessous dans ces captures d'écran:

 enter image description here

 enter image description here

Note importante

Si vous développez sur votre ordinateur local, vous devez utiliser des outils tels que ngrok qui fournissent un lien sécurisé à votre hôte local.

Dans les paramètres de connexion facebook, changez https://www.example.com avec le url fourni par ngrok quelque chose comme https://8b0215bc.ngrok.io.

C’est le seul moyen qui a fonctionné pour moi tout en évoluant dans ma machine locale.

3
chebaby

Créez un fournisseur dans votre fichier config/services.php

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

maintenant vous pouvez créer un contrôleur avec le code suivant 

//this function will redirect users to facebook login page
public 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);

}

et c'est votre route

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

Route::get('callback', 'LoginController@callback');
0
Khan Shahrukh