我们正在将laravel网站改编为laravel SPA,以及将来使用该网络应用程序的移动应用程序,因此我们需要某种API身份验证。我们正在使用Laravel Passport。
我一直在使用Laravel 5.5并遵循文档指南,但当我尝试使用postman的新登录时,服务器冻结,HTTP请求永远不会处理。
经过一些调试后,我发现当我使用Guzzle发布到/ oauth / token路由时崩溃了。但是当我使用Postman访问该路线时,我没有问题。
这是我的代码:
public function login(Request $request){
$http = new Client();
var_dump(1);
//die
$response = $http->post('http://localhost:8000/oauth/token', [ //Con postman esta ruta funciona
'form_params' => [
'grant_type' => 'password',
'client_id' => env('PASSWORD-CLIENT_ID',2),
'client_secret' => env('PASSWORD-CLIENT_SECRET',2),
'username' => $request->username, //parece usar correo, no nombre de usuario
'password' => $request->password,
'scope' => '*',
],
]);
var_dump(2);
//die;
return json_decode((string) $response->getBody(), true);
}
这是Guzzle的问题,还是Oauth / Passport?
答案 0 :(得分:0)
答案 1 :(得分:0)
我遇到了同样的问题,在我的情况下,并不是特别是Guzzle僵住了,我也尝试了卷曲。问题在于我全部在单线程的内置PHP Web服务器的1个实例上运行所有事实。
Web服务器仅运行一个单线程进程,因此如果请求被阻止,PHP应用程序将停止运行。
来源: http://php.net/manual/en/features.commandline.webserver.php
在对其自身进行调用时,线程将阻塞以等待其自己的回复。解决方案是将提供的应用程序和使用的应用程序分离到各自的实例中,或者在诸如Apache或nginx的多线程Web服务器上运行它。
答案 2 :(得分:0)
如果您正在寻找一种快速修复程序来测试您的更新-您可以通过打开两个命令提示符来完成此操作。第一个将运行php artisan serve
(本地默认端口为8000,并且您将在http://localhost:8000
上运行站点)。第二个将运行php artisan serve --port 8001
。
然后,您将发布请求更新为:
$response = $http->post('http://localhost:8001/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => env('PASSWORD-CLIENT_ID',2),
'client_secret' => env('PASSWORD-CLIENT_SECRET',2),
'username' => $request->username,
'password' => $request->password,
'scope' => '*',
],
]);
这应该在测试期间有所帮助,直到您能够访问服务器或本地虚拟主机上的所有内容为止。