Laravel Socialite InvalidStateException в AbstractProvider.php при перезагрузке моей страницы после входа в facebook

Я ожидал, что пользователь будет перенаправлен на мою домашнюю страницу после входа в facebook. Я использую Socialite, Laravel 5.4 и Xampp. После того, как я смог войти в систему через facebook, мой URL-адрес теперь находится в режиме обратного вызова, в котором обратный вызов вызывает контроллер входа, который перенаправляет на домашнюю страницу. Итак, проблема в том, что после перенаправления на домашнюю страницу мой URL-адрес теперь имеет некоторое хешированное значение.

localhost / sampleProject / public / login / facebook / callback? code = AQBZpjdW ...

и когда я перезагружаю страницу, в abstractprovider.php отображается ошибка недопустимого состояния. Мне что-то не хватает в моих функциях?

Внутри моего контроллера входа в систему

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

    /**
     * Obtain the user information from facebook.
     *
     * @return Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('facebook')->user();

        return view('user-profile', compact('user',$user));
    }

Внутри моего файла services.php

'facebook' => [
    'client_id' => 'insert_app_id_here',
    'client_secret' => 'enter_app_secret_here',
    'redirect' => 'http://localhost/sampleProject/public/login/facebook/callback',
],

Внутри моих маршрутов / web.php

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

Я также включил их в свой config / app.php

Laravel\Socialite\SocialiteServiceProvider::class,

а также

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

person Ralph    schedule 29.07.2017    source источник
comment
Перейдите по этой ссылке (stackoverflow.com/questions/30660847/)   -  person AddWeb Solution Pvt Ltd    schedule 29.07.2017


Ответы (2)


Вы можете попробовать эту штуку)

public function handleProviderCallback(Request $request)
{
    session()->put('state', $request->input('state'));
    $user = Socialite::driver('facebook')->user();

    return view('user-profile', compact('user',$user));
}
person Serhii Cherednyk    schedule 03.08.2017
comment
Потом я получил Этот код авторизации был использован. - person Ryan; 28.02.2019

Прежде всего, выполните следующую команду:

composer require laravel/socialite

После этого в app / config.php добавьте следующую строку в Provider.

Laravel\Socialite\SocialiteServiceProvider::class,

После этого в app / config.php добавьте следующую строку в псевдонимы

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

В config / services.php добавьте:

//Socialite
    'facebook' => [
        'client_id'     => '1234567890444',
        'client_secret' => '1aa2af333336fffvvvffffvff',
        'redirect'      => 'http://laravel.dev/login/callback/facebook',
    ],

Теперь создайте два маршрута, мои такие:

//Social Login
Route::get('/login/{provider?}',[
    'uses' => 'AuthController@getSocialAuth',
    'as'   => 'auth.getSocialAuth'
]);

Route::get('/login/callback/{provider?}',[
    'uses' => 'AuthController@getSocialAuthCallback',
    'as'   => 'auth.getSocialAuthCallback'
]);

Вам также необходимо создать контроллер для маршрутов, указанных выше, вот так:

<?php namespace App\Http\Controllers;

 use Laravel\Socialite\Contracts\Factory as Socialite;

 class AuthController extends Controller
 {

       public function __construct(Socialite $socialite){
           $this->socialite = $socialite;
       }


       public function getSocialAuth($provider=null)
       {
           if(!config("services.$provider")) abort('404'); //just to handle providers that doesn't exist

           return $this->socialite->with($provider)->redirect();
       }


       public function getSocialAuthCallback($provider=null)
       {
          if($user = $this->socialite->with($provider)->user()){
             dd($user);
          }else{
             return 'something went wrong';
          }
       }

 }

и, наконец, добавьте URL-адрес сайта в свое приложение Facebook. Я следил за этой статьей для предложенного выше решения. https://www.cloudways.com/blog/social-login-in-laravel-using-socialite/

person Saquib Lari    schedule 29.07.2017
comment
все то же самое. - person Ralph; 29.07.2017
comment
и обязательно добавьте URL сайта в приложение FB - person Saquib Lari; 29.07.2017