Laravel 5.1 - 通过 Socialite 进行 Facebook 身份验证
Laravel 5.1 - Facebook Authentication through Socialite
我正在尝试在我的项目中实施 Facebook 登录,但我收到错误消息:
ClientException in Middleware.php line 69:
Client error: 400
in /Applications/MAMP/htdocs/laratest/vendor/guzzlehttp/guzzle/src/Middleware.php line 69
at Middleware::GuzzleHttp{closure}(object(Response)) in Promise.php line 199
at Promise::callHandler('1', object(Response), array(object(Promise), object(Closure), null)) in Promise.php line 152
at Promise::GuzzleHttp\Promise{closure}() in TaskQueue.php line 60
at TaskQueue->run() in CurlMultiHandler.php line 96
我完成的步骤:
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',
],
已添加
Laravel\Socialite\SocialiteServiceProvider::class,
& 'Socialite' => Laravel\Socialite\Facades\Socialite::class,
在 配置>app.php
路由设置成功
Route::get('auth/facebook', 'Auth\AuthController@redirectToProvider');
Route::get('auth/facebook', 'Auth\AuthController@handleProviderCallback');
在我的 blade 文件中成功设置 link。 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;
}
还有用户table:
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!',
],
确保 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"
而且现在似乎工作正常
希望这对某人有帮助
我正在尝试在我的项目中实施 Facebook 登录,但我收到错误消息:
ClientException in Middleware.php line 69: Client error: 400
in /Applications/MAMP/htdocs/laratest/vendor/guzzlehttp/guzzle/src/Middleware.php line 69
at Middleware::GuzzleHttp{closure}(object(Response)) in Promise.php line 199
at Promise::callHandler('1', object(Response), array(object(Promise), object(Closure), null)) in Promise.php line 152
at Promise::GuzzleHttp\Promise{closure}() in TaskQueue.php line 60
at TaskQueue->run() in CurlMultiHandler.php line 96
我完成的步骤:
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',
],
已添加
Laravel\Socialite\SocialiteServiceProvider::class,
&'Socialite' => Laravel\Socialite\Facades\Socialite::class,
在 配置>app.php路由设置成功
Route::get('auth/facebook', 'Auth\AuthController@redirectToProvider');
Route::get('auth/facebook', 'Auth\AuthController@handleProviderCallback');
在我的 blade 文件中成功设置 link。
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; }
还有用户table:
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!',
],
确保 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"
而且现在似乎工作正常
希望这对某人有帮助