2015-02-12 4 views
5

Nach der Lektüre: http://laravel.com/docs/5.0/authentication konnte ich die Benutzerdaten aus dem OAuth-Anbieter (Facebook) mit Socialite abzurufen:Laravel 5 und Persönlichkeit des öffentlichen Lebens, wie in der Datenbank speichern und Log-in

$user->getNickname(); 
$user->getName(); 
$user->getEmail(); 
$user->getAvatar(); 

Aber ich couldn ‚finden t, weitere Dokumente, wie die Benutzer in der Datenbank zu speichern oder den Benutzer anmelden

ich möchte das Äquivalent tun.

Auth::attempt(['email' => $email, 'password' => $password]) 

Aber für die Details r E-Mail über Socialite (Ich habe kein Passwort)

Können Sie mir bitte ein Beispiel für die Verwendung von "Auth" mit über Socialite abgerufenen Benutzerdaten zeigen?

+1

Es hängt davon ab, wie Sie den Benutzer authentifizieren möchten. Wenn Sie möchten, dass der Benutzer sich nur mit der Facebook-E-Mail einloggt, müssen Sie nach einem Passwort fragen und es zusammen mit dem Benutzer speichern. Wenn Sie nicht nach einem Passwort fragen, speichern Sie nur das Token und die FB-ID, mit denen Sie dann den Benutzer zum Profil leiten können, wenn sich der Benutzer das zweite Mal anmeldet. Sie müssen das Token in Ihrer handleProviderCallback-Funktion speichern. – astroanu

Antwort

14

In den "Benutzer" table neue Spalte: facebook_user_id. Jedes Mal, wenn ein Nutzer versucht, sich über Facebook anzumelden, gibt Facebook die gleiche Nutzer-ID zurück.

public function handleProviderCallback($provider) 
{ 
    $socialize_user = Socialize::with($provider)->user(); 
    $facebook_user_id = $socialize_user->getId(); // unique facebook user id 

    $user = User::where('facebook_user_id', $facebook_user_id)->first(); 

    // register (if no user) 
    if (!$user) { 
     $user = new User; 
     $user->facebook_id = $facebook_user_id; 
     $user->save(); 
    } 

    // login 
    Auth::loginUsingId($user->id); 

    return redirect('/'); 
} 

Wie Laravel Socialite funktioniert?

public function redirectToProvider() 
{ 
    // 1. with this method you redirect user to facebook, twitter... to get permission to use user data 
    return Socialize::with('github')->redirect(); 
} 

public function handleProviderCallback() 
{ 
    // 2. facebook, twitter... redirects user here, where you write code to log in user 
    $user = Socialize::with('github')->user(); 
} 
+0

Was passiert, wenn der Benutzer sich entscheidet, sich nicht einmal mit Facebook einzuloggen? Sie können nur über Facebook auf diese Weise anmelden, richtig? – Notflip

+1

können Sie auch reguläre Anmeldung verlassen, Benutzer werden wählen, was sie wollen :) –

+3

Ich möchte nur hinzufügen, dass Sie BIGINT zum Speichern der zurückgegebenen Facebook-Benutzer-ID verwenden möchten. Eine typische ID sieht wie 10153582596228606 aus, die nicht in ein 4-Byte-Int passen kann – Dave

Verwandte Themen