2015-02-12 11 views
5

Dopo aver letto: http://laravel.com/docs/5.0/authentication sono stato in grado di recuperare i dati utente dal provider di OAuth (Facebook) utilizzando Socialite:laravel 5 e mondana, come salvare nel database e di log-in

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

Ma non potevo 't trovare qualsiasi ulteriore documentazione su come salvare l'utente nel database o accedere l'utente in

voglio fare l'equivalente di:.

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

Ma per i dettagli r prelevato via Socialite (non ho una password)

Puoi per favore mostrarmi un esempio sull'uso di "Auth" con i dati utente recuperati tramite Socialite?

+1

Dipende da come si desidera autenticare l'utente. Se hai bisogno che l'utente conceda l'accesso solo con l'e-mail di Facebook, devi chiedere una password e salvarla insieme all'utente. Se non si sta richiedendo una password, salvare solo il token e l'ID fb che quindi è possibile utilizzare per indirizzare l'utente al profilo quando l'utente ha effettuato l'accesso la seconda volta. È necessario salvare il token sulla propria funzione handleProviderCallback. – astroanu

risposta

14

Aggiungi a "utenti" tabella nuova colonna: facebook_user_id. Ogni volta che l'utente tenta di accedere tramite Facebook, Facebook restituirà lo stesso ID utente.

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

Come funziona laravel Socialite?

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

cosa succede se l'utente decide di non accedere con Facebook per una volta? Possono solo iscriversi usando Facebook in questo modo giusto? – Notflip

+1

puoi anche lasciare il login regolare, gli utenti sceglieranno quello che vogliono :) –

+3

Voglio solo aggiungere che vorrai usare BIGINT per memorizzare l'ID utente facebook restituito. Un tipico ID assomiglia a 10153582596228606 che non può stare all'interno di un int di 4 byte – Dave

Problemi correlati