Laravel 5.1 - 通过 Socialite 进行 Facebook 身份验证

Laravel 5.1 - Facebook Authentication through Socialite

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

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


我完成的步骤:

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

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

编辑: 当我注释掉 $user = Socialite::driver('facebook')->user(); 部分时,我被重定向到 localhost.com/auth/facebook

编辑 2: 我的 .env 文件:

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

确保 Laravel 使用

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

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

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

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

您的代码中有两个未知范围,scope1 和 scope2,Facebook 不知道这两个范围,并且在尝试访问它们时会 return 出错。使用像 public_profile 或电子邮件这样的真实范围,你应该被设置。 (范围是您请求的权限)

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

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

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

它更新了依赖项:

正在更新依赖项(包括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"

而且现在似乎工作正常

希望这对某人有帮助