5

我正在尝试在我的项目中实现 Facebook 登录,但是我收到一个错误:

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

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

  2. 在 Promise.php 第 199 行的 Middleware::GuzzleHttp{closure}(object(Response))

  3. 在 Promise.php 第 152 行中的 Promise::callHandler('1', object(Response), array(object(Promise), object(Closure), null))

  4. 在 TaskQueue.php 第 60 行中的 Promise::GuzzleHttp\Promise{closure}()

  5. 在 CurlMultiHandler.php 第 96 行中的 TaskQueue->run()


我经历的步骤:

  • composer require laravel/socialite& composer update.

  • 在我的config>services.app中,

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

  • config>app.php 中添加 Laravel\Socialite\SocialiteServiceProvider::class,&'Socialite' => Laravel\Socialite\Facades\Socialite::class,

  • 成功设置路由。

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

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

  • 在我的Controller>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

4 回答 4

3

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

Facebook 返回一个 ?code 参数,所以好好利用它!如果包含 ?code,则处理来自 Socialite 的登录逻辑,如果没有,则重定向到 Facebook。

您的代码中有两个未知范围,范围 1 和范围 2,它们对 Facebook 来说是未知的,并且在尝试访问它们时会返回错误。使用 public_profile 或 email 之类的真实范围,你应该被设置。(范围是您请求的权限)

于 2015-07-22T12:24:02.140 回答
2

确保 Laravel 正确调用您的配置条目

php artisan config:clear

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

于 2015-07-22T04:40:55.160 回答
0

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

于 2015-08-22T08:11:12.353 回答
0

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

作曲家需要 laravel/socialite 和作曲家更新

它更新了依赖:

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

我使用 Laravel 5.1:

作曲家.json:

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

它现在似乎工作正常

希望这可以帮助某人

于 2016-01-22T13:24:31.467 回答