Laravel socialite с несколькими провайдерами

Я использую laravel 5.4, а также использую пакет socialite для обработки регистрации / входа из учетных записей социальных сетей. соответственно, у меня есть код ниже, и пользователи могут регистрироваться / входить в систему через facebook, но я также хочу использовать систему twitter и google.

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.

Спасибо.


person djhru    schedule 01.06.2017    source источник


Ответы (1)


Я знаю, что это учебник по версии 5.3, но вы можете применить те же принципы в своей ситуации. Социальный вход с несколькими провайдерами. Вам нужно передать строку драйверу, чтобы он знал, какого провайдера вы хотите использовать. Это также показывает эффективный способ настройки ваших таблиц, поиск раздела миграции. Надеюсь это поможет.

Метод аутентификации использует метод драйвера Socialite, который принимает строку, представляющую поставщика социальной сети, которого мы хотим использовать. Важно отметить, что этот метод ожидает значение, соответствующее поддерживаемому поставщику. Итак, если мы хотим аутентифицироваться с помощью facebook, мы должны передать строку facebook; для Google мы передаем google и так далее.

person rbaskam    schedule 01.06.2017