Laravel 5.1 - Facebook through Socialite (Client Error: 400)
Laravel 5.1 - Facebook through Socialite (Client Error: 400)
使用 this tutorial on Laracast (Laravel 5.0 - Socialite),特别是在 min 12.11 之前,我已成功设置所有内容。但是,我正在使用 Laravel 5.1
定义了我的路线,但目前注释掉了回调提供者,因为我只是想通过获取的令牌获取用户详细信息:
Route::get('auth/facebook', 'Auth\AuthController@redirectToProvider');
//Route::get('auth/facebook/aaa', 'Auth\AuthController@handleProviderCallback');
在config>services.php
中添加必需品:
'facebook' => [
'client_id' => '##',
'client_secret' => env('FB_SECRET_ID'),
'redirect' => 'http://laratest.dev/auth/facebook',
],
我决定暂时 return 到同一页面 (auth/facebook
)。这就是为什么我将 return 设置为 domain.devv/auth/facebook
进行测试。
在我的 AuthController.php
中,我设置:
public function redirectToProvider(AuthenticateUser $authenticateUser, Request $request)
{
return $authenticateUser->execute($request->has('code'));
}
最后,在我的 AuthenticateUser.php
:
use Illuminate\Contracts\Auth\Guard; (PS. I changed Authenticator to Guard)
class AuthenticateUser {
private $users;
private $socialite;
private $auth;
public function __construct(UserRepository $users, Socialite $socialite, Guard $auth)
{
$this->users = $users;
$this->socialite = $socialite;
$this->auth = $auth;
}
public function execute($hasCode)
{
// dd($hasCode) *First dd
if ( ! $hasCode) return $this->getAuthorizationFirst();
// $user = $this->socialite->driver('facebook')->user();
// dd($hasCode) *Second dd
// dd($user) *Third dd
}
private function getAuthorizationFirst()
{
return $this->socialite->driver('facebook')
->scopes(['public_profile', 'email'])->redirect();
}
}
现在,我正在单击 Login with Facebook
link 并转到 domain.dev/auth/facebook?code=943299043290...
当我只使用 *First dd
(所有其他注释行都被注释)时,它 returns false
。
当我只使用 *Second dd
(注释行 $user = $this->socialite->driver('facebook')->user();
)时,它 returns true
。
所以一切都很完美,先是 execute()
,然后是 getAuthorizationFirst()
。最后,returns 返回到 execute()
,带走的令牌也包含在 link(domain.dev/auth/facebook?code=943299043290...
)中。
我的问题出在这里:
第二次我取消注释 $user = $this->socialite->driver('facebook')->user();
,我收到一个错误:
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
这一行 ($user = $this->socialite->driver('facebook')->user();
) 由于某些原因对我来说不起作用(虽然它在 tutorial(分钟12.11 15 秒简要说明).
每当我使用 $user = $this->socialite->driver('facebook')->user();
时,我都会收到错误 ClientException in Middleware.php line 69: Client error: 400
,当然,我无法获得 dd($user)
。
添加,当我看到 ClientException 错误时,link 仍然带有代码:(domain.dev/auth/facebook?code=943299043290...
)
我也遇到了这个问题,在我的情况下,我必须在域字段中的 config/session.php 中添加我的域,并将它也添加到我的应用程序提供商中
使用 this tutorial on Laracast (Laravel 5.0 - Socialite),特别是在 min 12.11 之前,我已成功设置所有内容。但是,我正在使用 Laravel 5.1
定义了我的路线,但目前注释掉了回调提供者,因为我只是想通过获取的令牌获取用户详细信息:
Route::get('auth/facebook', 'Auth\AuthController@redirectToProvider'); //Route::get('auth/facebook/aaa', 'Auth\AuthController@handleProviderCallback');
在
config>services.php
中添加必需品:'facebook' => [ 'client_id' => '##', 'client_secret' => env('FB_SECRET_ID'), 'redirect' => 'http://laratest.dev/auth/facebook', ],
我决定暂时 return 到同一页面 (auth/facebook
)。这就是为什么我将 return 设置为 domain.devv/auth/facebook
进行测试。
在我的
AuthController.php
中,我设置:public function redirectToProvider(AuthenticateUser $authenticateUser, Request $request) { return $authenticateUser->execute($request->has('code')); }
最后,在我的
AuthenticateUser.php
:use Illuminate\Contracts\Auth\Guard; (PS. I changed Authenticator to Guard) class AuthenticateUser { private $users; private $socialite; private $auth; public function __construct(UserRepository $users, Socialite $socialite, Guard $auth) { $this->users = $users; $this->socialite = $socialite; $this->auth = $auth; } public function execute($hasCode) { // dd($hasCode) *First dd if ( ! $hasCode) return $this->getAuthorizationFirst(); // $user = $this->socialite->driver('facebook')->user(); // dd($hasCode) *Second dd // dd($user) *Third dd } private function getAuthorizationFirst() { return $this->socialite->driver('facebook') ->scopes(['public_profile', 'email'])->redirect(); } }
现在,我正在单击 Login with Facebook
link 并转到 domain.dev/auth/facebook?code=943299043290...
当我只使用 *First dd
(所有其他注释行都被注释)时,它 returns false
。
当我只使用 *Second dd
(注释行 $user = $this->socialite->driver('facebook')->user();
)时,它 returns true
。
所以一切都很完美,先是 execute()
,然后是 getAuthorizationFirst()
。最后,returns 返回到 execute()
,带走的令牌也包含在 link(domain.dev/auth/facebook?code=943299043290...
)中。
我的问题出在这里:
第二次我取消注释 $user = $this->socialite->driver('facebook')->user();
,我收到一个错误:
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
这一行 ($user = $this->socialite->driver('facebook')->user();
) 由于某些原因对我来说不起作用(虽然它在 tutorial(分钟12.11 15 秒简要说明).
每当我使用 $user = $this->socialite->driver('facebook')->user();
时,我都会收到错误 ClientException in Middleware.php line 69: Client error: 400
,当然,我无法获得 dd($user)
。
添加,当我看到 ClientException 错误时,link 仍然带有代码:(domain.dev/auth/facebook?code=943299043290...
)
我也遇到了这个问题,在我的情况下,我必须在域字段中的 config/session.php 中添加我的域,并将它也添加到我的应用程序提供商中