Laravel 5.1 - 通过社交网站进行Facebook身份验证

时间:2015-07-22 03:49:11

标签: facebook facebook-graph-api laravel laravel-socialite

我正在尝试将Facebook登录实施到我的项目,但是收到错误:

  

Middleware.php第69行中的ClientException:   客户端错误:400

     
      
  1. /Applications/MAMP/htdocs/laratest/vendor/guzzlehttp/guzzle/src/Middleware.php第69行

  2.   
  3. 在Promise.php第199行的Middleware :: GuzzleHttp {closure}(对象(响应))

  4.   
  5. 在Promise.php第152行的Promise :: callHandler('1',对象(响应),数组(对象(Promise),对象(Closure),null)) < / p>

  6.   
  7. 在Promise :: GuzzleHttp \ Promise {closure}()在TaskQueue.php第60行

  8.   位于CurlMultiHandler.php第96行的TaskQueue-&gt; run()
  9.   

我经历过的步骤:

  • composer require laravel/socialite&amp; composer update

  • 在我的 config&gt; services.app 中,

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

  • Laravel\Socialite\SocialiteServiceProvider::class,&amp; config&gt; app.php

  • 中的'Socialite' => Laravel\Socialite\Facades\Socialite::class,
  • 成功设置路线。

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

  • 在我的刀片文件中成功设置链接。 Login with Facebook

  • 在我的 Controller&gt; 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();
                });
        }
    

修改 当我评论$user = Socialite::driver('facebook')->user();部分时,我会被重定向到localhost.com/auth/facebook

编辑2: 我的.env文件:

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

4 个答案:

答案 0 :(得分:3)

我认为你的两条路线不应该有相同的网址,因为Laravel无法知道使用哪条路线。

Facebook返回一个?代码参数,所以请使用它!如果包含?代码,则从Socialite处理登录逻辑,否则,重定向到Facebook。

您的代码中有两个未知范围,范围1和范围2,这些范围是Facebook未知的,并且在尝试访问它们时会返回错误。使用像public_profile或电子邮件这样的真实范围,您应该设置。 (范围是您要求的权限)

答案 1 :(得分:1)

确保Laravel使用

正确调用您的配置条目
php artisan config:clear

并检查.env文件中的FB_CLIENT_ID和FB_SECRET_ID条目。可能是客户失败了,因为它试图在没有客户端和秘密的情况下连接到Facebook,而是陷入异常。

答案 2 :(得分:0)

我遇到了同样的问题(Middleware.php第69行中的ClientException:客户端错误:400)。 我只是在facebook的高级设置中关闭“Require App Secret”,这解决了问题。也许这些信息会有所帮助。

答案 3 :(得分:0)

我在Facebook APi上遇到了类似的问题 - 它给出了响应代码400 我刚尝试过:

作曲家需要laravel / socialite&amp;作曲家更新

并更新了依附词:

更新依赖项(包括require-dev)    - 删除laravel / socialite(v2.0.11)    - 安装laravel / socialite(v2.0.14)

我正在使用Laravel 5.1:

composer.json:

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

现在似乎工作正常

希望这有助于某人