Laravel 5.1和社交名媛问题

时间:2016-02-24 16:48:11

标签: php laravel laravel-5.1 laravel-socialite

这不是关于我现在遇到的问题的帖子。我打算在我的应用程序中使用Laravel Socialite插件,我已经使用Laravel的内置Auth系统完成了一个完整的登录/注册系统,但我想知道是否有一个好的方法允许已在我的应用中拥有其帐户的用户将其社交个人资料与已有帐户相关联?

计划是他们可以使用他们的用户名和密码登录他们的任何社交个人资料。到目前为止,我所做的所有研究都解释了如何设置Socialite并利用这些数据来注册/登录新用户,但是我找不到任何可以将两者结合在一起的东西。

我不是在寻找任何人为我写这个,所以请不要对这篇文章感到困惑。

感谢您的任何信息, 安迪

1 个答案:

答案 0 :(得分:2)

绝对

我在一个网站上有FB和Twitter OAuth。我的方法是将oauth_facebook_idoauth_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('/');

希望这有助于您了解如何做到这一点。