2015-02-12 108 views
5

看完後:http://laravel.com/docs/5.0/authentication我能夠使用來檢索的OAuth提供商(Facebook)的用戶詳細信息社會名流:Laravel 5和社會名流,如何在數據庫中保存和登錄

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

但我不能而她不知道如何將用戶保存在數據庫或登錄用戶的任何進一步資料

我想做的相當於:

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

但對於細節[R etrieved通過Socialite(我沒有密碼)

你能告訴我一個使用「Auth」與用戶數據通過Socialite檢索的例子嗎?

+1

這取決於你想如何認證用戶。如果您需要用戶僅通過facebook電子郵件授予登錄權限,則您需要提供密碼並將其與用戶一起保存。如果您不要求輸入密碼,只保存令牌和fb id,然後您可以使用該令牌在用戶第二次登錄時將用戶引導至配置文件。您需要將標記保存在您的handleProviderCallback函數中。 – astroanu 2015-02-12 06:40:35

回答

14

添加到「」用戶「表新列:facebook_user_id。每次用戶嘗試通過Facebook登錄時,Facebook都會返回相同的用戶ID。

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

Laravel名媛是如何工作的?

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

如果用戶決定不使用Facebook登錄一次,該怎麼辦?他們只能用這種方式登錄Facebook嗎? – Notflip 2015-07-07 12:38:20

+1

你也可以定期登錄,用戶將選擇他們想要的:) – 2015-07-09 14:02:07

+3

只是想補充一點,你會想要使用BIGINT來存儲返回的Facebook用戶ID。一個典型的ID看起來像10153582596228606,它不適合4字節的int – Dave 2015-07-17 01:36:17

相關問題