2016-02-24 83 views
0

這不是關於我現在有問題的帖子。我正計劃在我的應用程序中使用Laravel Socialite插件,我已經有一個使用Laravel內建的Auth系統的完全正常工作的登錄/註冊系統,但我想知道是否有一種好方法可以允許已在我的帳戶中擁有帳戶的用戶應用程序將他們的社交個人資料鏈接到已有的帳戶?Laravel 5.1和Socialite問題

該計劃是他們可以用他們的用戶名和密碼登錄他們的任何社交檔案。到目前爲止,我所做的所有研究都解釋瞭如何設置Socialite並將這些數據用於註冊/登錄新用戶,但我無法找到任何可以將兩者結合在一起的任何內容。

我不是在找任何人爲我寫這篇文章,所以請不要被這篇文章弄糊塗了。

感謝任何信息, 安迪

回答

2

絕對。

我在一個網站上有FB和Twitter OAuth。我這樣做的方法是將oauth_facebook_idoauth_twitter_id列添加到users表(以及avatar列,如果需要的話)。

我必須設置爲/auth/{provider}/auth/{provider}/callback,所以/auth/facebook/auth/facebook/callback例如路線。

在我的的handleProviderCallback($provider)方法中,我抓取返回的用戶的詳細信息,並檢查它們是否已經存在於我的數據庫中,包括他們的電子郵件,Facebook OAuth ID或Twitter OAuth ID。如果它們存在,我設置他們的電子郵件,OAuth ID和他們的頭像,如果它們不存在,我創建它們。然後我登錄他們。

$user = Socialite::driver($provider)->user(); 

    $user_query = User::where('email', $user->email) 
     ->orWhere('oauth_facebook_id', $user->id) 
     ->orWhere('oauth_twitter_id', $user->id) 
     ->get(); 

    if($user_query->count() > 0) { 

     $the_user = $user_query->first(); 

     if($provider === 'facebook') { 
      $the_user->oauth_facebook_id = $user->id; 
     } 

     if($provider === 'twitter') { 
      $the_user->oauth_twitter_id = $user->id; 
     } 

     $the_user->avatar = $user->avatar; 

     $the_user->save(); 

     \Auth::login($the_user, true); 

     return redirect('/'); 
    } 

    $new_user = User::create([ 
     'name' => $user->name, 
     'email' => $user->email, 
     'oauth_facebook_id' => $provider === 'facebook' ? $user->id : NULL, 
     'oauth_twitter_id' => $provider === 'twitter' ? $user->id : NULL, 
     'avatar' => $user->avatar 
    ]); 

    \Auth::login($new_user, true); 

    return redirect('/'); 

希望這可以幫助您瞭解如何做到這一點。

+0

這是一個很棒的信息,非常感謝。唯一的問題*如果你想要這樣做,那就是有人可能會爲他們的社交方面使用不同的電子郵件,而不是我的應用(我在幾個網站上)。您是否認爲有一種方法可以使用此代碼在使用用戶名和密碼登錄後啓用關聯帳戶? –