我正在尝试将Facebook登录实施到我的项目,但是收到错误:
Middleware.php第69行中的ClientException: 客户端错误:400
/Applications/MAMP/htdocs/laratest/vendor/guzzlehttp/guzzle/src/Middleware.php第69行
在Promise.php第199行的Middleware :: GuzzleHttp {closure}(对象(响应))
在Promise.php第152行的Promise :: callHandler('1',对象(响应),数组(对象(Promise),对象(Closure),null)) < / p>
- 位于CurlMultiHandler.php第96行的TaskQueue-&gt; run()
在Promise :: GuzzleHttp \ Promise {closure}()在TaskQueue.php第60行
- 醇>
我经历过的步骤:
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!',
],
答案 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"
现在似乎工作正常
希望这有助于某人