絕對。
我在一個網站上有FB和Twitter OAuth。我這樣做的方法是將oauth_facebook_id
和oauth_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('/');
希望這可以幫助您瞭解如何做到這一點。
這是一個很棒的信息,非常感謝。唯一的問題*如果你想要這樣做,那就是有人可能會爲他們的社交方面使用不同的電子郵件,而不是我的應用(我在幾個網站上)。您是否認爲有一種方法可以使用此代碼在使用用戶名和密碼登錄後啓用關聯帳戶? –