首页 文章

Laravel社交名媛,提供多种服务

提问于
浏览
2

我正在使用laravel 5.4并使用socialite包来处理来自社交网络帐户的注册/登录 . 我有下面的代码,用户可以通过Facebook注册/登录,但我也想要推特和谷歌系统 .

public function handleProviderCallback()
    {
        try {
            $user = Socialite::driver('facebook')->fields([
            'first_name', 'last_name', 'email', 'gender'
        ])->scopes(['first_name', 'last_name'])->user();
        } catch (Exception $e) {
            return redirect()->route('user.index');
        }

        $authUser = $this->findOrCreateUser($user);

        Auth::login($authUser, true);

        return redirect()->route('jobseeker.profile');
    }

    /**
     * Return user if exists; create and return if doesn't
     *
     * @param $facebookUser
     * @return User
     */
    private function findOrCreateUser($facebookUser)
    {
        $authUser = User::where('fb_id', $facebookUser->id)->first();

        if ($authUser){
            return $authUser;
        }
        return User::create([
            'fb_id' => $facebookUser->id,
            'first_name' => $facebookUser->user['first_name'],
            'last_name'  => $facebookUser->user['last_name'],
            'username' => $facebookUser->user['last_name'],
            'avatar' => $facebookUser->avatar,
            'email'  => $facebookUser->email,
            'gender' => $facebookUser->user['gender'],
        ]);

    }

我面临的问题是,如果我只使用像Facebook这样的一个提供商,我现在一切都很好,但如果我添加第二个注册/登录系统与社交网站不会工作 .

我看了一些文章,看到他们用过

public function handleProviderCallback($provider)

但老实说,我没有明白它如何区分提供商并认识到它们 .

所以我需要帮助才能让这两个社交帐户适用于我的项目以及facebook .

谢谢 .

1 回答

  • 0

    我知道它是5.3的教程,但你可以采用相同的原则并将其应用于你的情况 . Social Login with Multiple Providers . 您需要将一个字符串传递给驱动程序,以便让它知道您希望使用哪个提供程序 . 它还显示了设置表的有效方法,搜索迁移部分 . 希望这可以帮助 .

    authenticate方法使用Socialite的驱动程序方法,该方法接受表示我们要使用的社交提供程序的字符串 . 请务必注意,此方法需要一个与支持的提供程序匹配的值 . 所以,如果我们想通过facebook进行身份验证,我们应该通过字符串facebook;谷歌我们通过谷歌等 .

相关问题