这不是关于我现在遇到的问题的帖子。我打算在我的应用程序中使用Laravel Socialite
插件,我已经使用Laravel的内置Auth
系统完成了一个完整的登录/注册系统,但我想知道是否有一个好的方法允许已在我的应用中拥有其帐户的用户将其社交个人资料与已有帐户相关联?
计划是他们可以使用他们的用户名和密码或登录他们的任何社交个人资料。到目前为止,我所做的所有研究都解释了如何设置Socialite并利用这些数据来注册/登录新用户,但是我找不到任何可以将两者结合在一起的东西。
我不是在寻找任何人为我写这个,所以请不要对这篇文章感到困惑。
感谢您的任何信息, 安迪
答案 0 :(得分:2)
绝对
我在一个网站上有FB和Twitter OAuth。我的方法是将oauth_facebook_id
和oauth_twitter_id
列添加到users
表(以及avatar
列,如果您愿意的话)。
我将路线设置为/auth/{provider}
和/auth/{provider}/callback
,例如/auth/facebook
和/auth/facebook/callback
。
在handleProviderCallback($provider)
上的AuthController
方法中,我抓住返回的用户的详细信息,并检查他们的数据库中是否已存在他们的电子邮件,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('/');
希望这有助于您了解如何做到这一点。