Laravel Socialite с Facebook не входит в систему

Я точно слежу за документацией.

https://github.com/laravel/socialite и https://laravel.com/docs/5.1/authentication#social-authentication

Я создал свое приложение на Facebook, и все заработало. Когда я нажимаю кнопку «Войти через Facebook», приложение авторизует приложение и возвращает меня на мой сайт. Однако он не показывает, что я вошел в систему. Если я использую dd () вместо перенаправления ниже, я получаю все данные из своей учетной записи Facebook. Но страницы, которые видны только зарегистрированным пользователям, не видны.

Вот мой контроллер:

public function redirectToProvider()
{
    return Socialite::driver('facebook')->redirect();
}

public function handleProviderCallback()
{
    $user = Socialite::driver('facebook')->user();

    return redirect('my-profile')
            ->with('message', 'You have signed in with Facebook.');
}

Вот мои маршруты:

Route::get('login/facebook', 'Auth\AuthController@redirectToProvider');
Route::get('login/facebook/callback', 'Auth\AuthController@handleProviderCallback');

Socialite правильно установлен в composer.json. Классы находятся в config / app.php, а идентификаторы моего приложения FB находятся в config / services.php.

Есть идеи, почему это не работает?


person jerauf    schedule 09.07.2016    source источник


Ответы (1)


В методе handleProviderCallback вам необходимо создать и аутентифицировать пользователя, возвращенного драйвером.

Создайте пользователя, если его не существует:

$userModel = User::firstOrNew(['email' => $user->getEmail()]);
if (!$userModel->id) {
    $userModel->fill([.....]);
    $userModel->save();
}

Затем аутентифицируйте пользователя:

Auth::login($userModel);

Ваш метод будет выглядеть так:

public function handleProviderCallback() {
    $user = Socialite::driver('facebook')->user();

    $userModel = User::firstOrNew(['email' => $user->getEmail()]);
    if (!$userModel->id) {
        $userModel->fill([.....]);//Fill the user model with your data
        $userModel->save();
    }

    Auth::login($userModel);

    return redirect('my-profile')
            ->with('message', 'You have signed in with Facebook.');
}
person Ismail RBOUH    schedule 09.07.2016