绝对。
我在一个网站上有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('/');
希望这可以帮助您了解如何做到这一点。
这是一个很棒的信息,非常感谢。唯一的问题*如果你想要这样做,那就是有人可能会为他们的社交方面使用不同的电子邮件,而不是我的应用(我在几个网站上)。您是否认为有一种方法可以使用此代码在使用用户名和密码登录后启用关联帐户? –