Laravel 5.1 和 Socialite 个问题

Laravel 5.1 and Socialite Questions

这不是关于我现在遇到的问题的post。我计划在我的应用程序中使用 Laravel Socialite 插件,我已经有一个完全可用的 login/register 系统,使用 Laravel 内置的 Auth 系统,但我想知道是否有一种好方法允许已经在我的应用程序中拥有帐户的用户将他们的社交资料 link 到现有帐户?

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

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

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

绝对。

我在一个网站上同时拥有 FB 和 Twitter OAuth。我这样做的方法是将 oauth_facebook_idoauth_twitter_id 列添加到 users table(以及 avatar 列,如果需要的话)。

我将路由设置为 /auth/{provider}/auth/{provider}/callback,例如 /auth/facebook/auth/facebook/callback

AuthController 上的 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('/');

希望这能帮助您理解如何去做。