0

这不是关于我现在遇到的问题的帖子。我打算Laravel Socialite在我的应用程序中使用该插件,我已经有一个使用 Laravel 内置Auth系统的完整登录/注册系统,但我想知道是否有一种好方法可以让已经在我的应用程序中拥有帐户的用户将他们的社交资料链接到现有帐户?

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

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

感谢您提供任何信息,安迪

4

1 回答 1

2

绝对地。

我在一个站点上有 FB 和 Twitter OAuth。我这样做的方法是向表中添加oauth_facebook_idoauth_twitter_idusers(以及一avatar列,如果你想要的话)。

我将路线设置为and /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('/');

希望这可以帮助您了解如何做到这一点。

于 2016-02-24T20:17:04.307 回答