2015-07-22 3 views
4

Я пытаюсь реализовать Facebook Вход в мой проект, однако я получаю сообщение об ошибке:Laravel 5,1 - Facebook Аутентификация через Socialite

ClientException in Middleware.php line 69: Client error: 400

  1. in /Applications/MAMP/htdocs/laratest/vendor/guzzlehttp/guzzle/src/Middleware.php line 69

  2. at Middleware::GuzzleHttp{closure}(object(Response)) in Promise.php line 199

  3. at Promise::callHandler('1', object(Response), array(object(Promise), object(Closure), null)) in Promise.php line 152

  4. at Promise::GuzzleHttp\Promise{closure}() in TaskQueue.php line 60

  5. at TaskQueue->run() in CurlMultiHandler.php line 96


шагов я прошла:

  • composer require laravel/socialite & composer update.

  • В моей конфигурации> services.app,

'facebook' => [ 'client_id' => env('FB_CLIENT_ID'), 'client_secret' => env('FB_SECRET_ID'), 'redirect' => 'http://localhost.com:8888', ],

  • Добавлено Laravel\Socialite\SocialiteServiceProvider::class, & 'Socialite' => Laravel\Socialite\Facades\Socialite::class, в конфигурации> app.php

  • Настройте маршруты успешно.

Route::get('auth/facebook', 'Auth\[email protected]'); Route::get('auth/facebook', 'Auth\[email protected]');

  • Настройте успешно ссылку на мой файл лезвия. Login with Facebook

  • В мой контроллер> AuthController.php, я добавил:

    use Laravel\Socialite\Facades\Socialite; 
    
    ** Beside everything that AuthController has, inside the AuthController class, I added:** 
    
        public function redirectToProvider() 
        { 
        return Socialite::driver('facebook') 
         ->scopes(['scope1', 'scope2'])->redirect(); 
        } 
    
    /** 
    * Obtain the user information from Facebook. 
    * 
    * @return Response 
    */ 
    
        public function handleProviderCallback() 
        { 
         $user = Socialite::driver('facebook')->user(); 
    
        // $user->token; 
        } 
    
  • Также пользователи таблице:

    public function up() 
        { 
         Schema::create('users', function (Blueprint $table) { 
          $table->increments('id'); 
          $table->string('username'); 
          $table->string('name'); 
          $table->string('email')->unique(); 
          $table->string('password', 60); 
          $table->string('avatar'); 
          $table->string('provider'); 
          $table->string('provider_id'); 
          $table->rememberToken(); 
          $table->timestamps(); 
          }); 
        } 
    

Edit: Когда я закомментировать $user = Socialite::driver('facebook')->user(); часть, я получаю redir ected к localhost.com/auth/facebook

Edit 2: Мой .env файл:

'facebook' => [ FB_CLIENT_ID => '###', FB_SECRET_ID => 'this-is-secret!', ],

ответ

3

Я думаю, что у ваших двух маршрутов не должно быть одинакового URL-адреса, потому что у Laravel нет способа узнать, что использовать.

Facebook возвращает параметр кода, поэтому используйте его! Если код включен, тогда обработайте логин логики от Socialite, если нет, перенаправляйтесь в Facebook.

У вас есть два неизвестных области действия в вашем коде, сфере видимости1 и области видимости2, которые неизвестны Facebook и возвратят ошибку при попытке получить к ним доступ. Используйте реальные области, такие как public_profile или email, и вы должны быть установлены. (scopes - разрешения, которые вы запрашиваете)

+0

Хороший вызов, два идентичных маршрута GET, вероятно, будут проблемой. – ceejayoz

+1

-> scopes (['scope1', 'scope2']) также могут вызывать проблемы, действительно ли это похоже на ваш контроллер? Если это так, они неизвестны Facebook, и, скорее всего, они отклонят запрос. – Francismori7

+0

Я добавил 'auth/facebook/callback' для второго маршрута, и теперь он направляется в Facebook. Однако, как сказал @ Francismori7, здесь появляется ошибка, которую я получаю: ошибка Facebook -> 'Invalid Scope: scope1'. Должен ли я просто удалить области «->» (['scope1', 'scope2']) -> redirect(); 'part полностью? – senty

1

Убедитесь Laravel правильно называя свои записи конфигурации с

php artisan config:clear 

А также проверьте файл .env для записей FB_CLIENT_ID и FB_SECRET_ID. Вероятно, клиент терпит неудачу, потому что пытается подключиться к facebook без клиента и тайны, попадая в исключение.

+0

Я только редактировал OP, показывая мой файл .env. Я попробовал «config: clear», но все равно не повезло. Я также активировал приложение Facebook для публики (стал зеленым кругом), но все равно та же ошибка – senty

+0

Не размещайте файл .env здесь! Любой может это увидеть и может быть использован любым из нас ... – rotvulpix

+0

Я чувствовал себя измученным. Работая над этой проблемой почти целый день, пытаясь понять, что случилось. У вас есть какая-то подсказка? – senty

0

У меня была такая же проблема (ClientException в Middleware.php строка 69: Ошибка клиента: 400). Я просто отключил «Требовать секрет приложения» в дополнительных настройках facebook, и это решило проблему. Возможно, эта информация будет полезна.

0

У меня была аналогичная проблема с Facebook API - это дало ответ 400 и Ive только что попробовал:

композитор требуют обновления Laravel/светская & композитор

и обновляемые dependencis:

Обновление зависимостей (включая require-dev) - Удаление laravel/socialite (v2.0.11) - Установка laravel/socialite (v2.0.1) 4)

Im Использование Laravel 5,1:

composer.json:

"laravel/framework": "5.1.*", 
    "laravel/socialite": "^2.0" 

И это, кажется, работает отлично теперь

Надеется, что это помогает кому-то

Смежные вопросы