it-swarm.com.de

Verwenden Sie Laravel Socialite, um sich bei Facebook anzumelden

Ich bin jedoch neu bei Laravel und folge dem Tutorial auf http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/ , um einen Benutzer über Facebook in meine Anwendung einzuloggen. Fast überall finde ich jedoch ein Tutorial mit Github oder Twitter für das in Laravel bereitgestellte Socialite Plugin.

Mein Problem ist, dass beim Klicken auf die Schaltfläche "Bei Facebook anmelden" alles im Tutorial folgt, wurde eine "Ungültige Argument-Ausnahme" mit dem Treiber "Kein sozialer Benutzer" angegeben. ".

Eine andere Stapelüberlauffrage schien die Dinge einzugrenzen: https://stackoverflow.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n

Angabe, dass das Problem in der Datei config/services.php liegt

Jetzt habe ich die app_id und app_secret. Der Weiterleitungslink scheint jedoch verwirrend zu sein, da ich ihn auch nicht auf Facebook finden kann. Ich bin mir bewusst, dass meine App sich hier für das Login anmelden sollte, jedoch nicht sicher ist, was sie sein soll.

Hat jemand eine Idee dazu?.

15
Namit

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

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

der Lauf composer update

In config/services.php add:

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

Sie müssen zwei Routen erstellen, meine sind wie folgt:

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


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

Sie müssen auch einen Controller für die obigen Routen erstellen:

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

 }

und schließlich fügen Sie Ihrer Facebook-App die URL der Website hinzu:

enter image description here

39
Digitlimit

Update 2018 - Laravel 5.6 - Socialite 3.0

Es ist ein bisschen schwierig für etwas, das aussieht/sollte einfach sein, aber trotzdem mache ich die Dinge für mich.

Serverseite

sie finden diese Anweisungen und weitere Details in socialite docs

Installation

composer require laravel/socialite

Aufbau

in config/services.php hinzufügen 

'facebook' => [

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

in .env datei hinzufügen 

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

in routes/web.php hinzufügen

Route::get('auth/facebook/', 'Auth\[email protected]')->name('auth.facebook');

Route::get('auth/facebook/callback', 'Auth\[email protected]')->name('auth.facebook.callback');

in App\Http\Controllers\Auth neuen Controller hinzufügen 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');
        }
    }
}

Facebook-Seite

gehen Sie zu https://developers.facebook.com/apps und erstellen Sie eine neue App (falls Sie noch keine haben)

und stellen Sie sicher, dass Ihre App-Einstellungen in diesen Screenshots wie folgt aussehen:

 enter image description here

 enter image description here

Wichtige Notiz

Wenn Sie auf Ihrem lokalen Computer entwickeln, müssen Sie Tools wie ngrok verwenden, die einen sicheren Link zu Ihrem localhost bereitstellen.

Ändern Sie in den Facebook-Login-Einstellungen https://www.example.com mit dem url von ngrok etwas wie - https://8b0215bc.ngrok.io.

Dies ist der einzige Weg, der für mich beim Entwickeln auf meinem lokalen Rechner funktioniert hat.

3
chebaby

Erstellen Sie einen Provider in Ihrer config/services.php-Datei

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

jetzt können Sie einen Controller mit folgendem Code erstellen 

//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);

}

und das ist deine Route

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

Route::get('callback', '[email protected]');
0
Khan Shahrukh