laravel护照oauth功能使用卷曲或guzzle

时间:2017-01-20 22:23:15

标签: php laravel curl guzzle laravel-passport

我在api路线文件中有这条路线

Route::post('/user/register', 'HomeController@register');

并且寄存器功能是

public function register(Request $request)
 {
    $user = User::create([
        ...
    ]);
    return $this->getAccessToken($request);
}

public function getAccessToken(Request $request)
{
    $url = url('/oauth/token');
    $headers = ['Accept' => 'application/json'];
    $http = new Client;

    $response = $http->post($url, [
        'headers' => $headers,
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => 'my_client_id',
            'client_secret' => 'my_client_secret',
            'username' => 'username',
            'password' => 'password'
        ],
    ]);

    return json_decode((string)$response->getBody(), true);
}

现在当我向url发送post请求时,用户已创建,但请求继续加载且没有响应,整个应用程序挂起,直到我关闭IDE - phpstorm - 我将相同的参数发送到邮递员的同一个网址/oauth/token,它运行正常。 任何帮助或任何人告诉我我错过了什么?

2 个答案:

答案 0 :(得分:1)

当网址包含像

这样的端口时,问题是 curl 不起作用

本地主机:8000

答案 1 :(得分:0)

在Stack Overflow上看到这个问题:

Why does file_get_contents work with google.com but not with my site?

  

对于任何使用PHP内置Web服务器(使用   Laravel在我的情况下),它是由你的请求被阻止引起的   file_get_contents()/ curl functions。

     

开发服务器的文档说

PHP applications will stall if a request is blocked.
     

由于PHP内置服务器是单线程的,因此请求另一个   服务器上的url将暂停第一个请求,并且它会超时。

     

作为解决方案,您可以使用nginx(LEMP堆栈)或其他Web服务器。

     

编辑:截至目前,我真的建议您使用Homestead作为开发   PHP项目的环境。它为您节省了大量的工作   配置,创建虚拟主机和数据库配置以获取更多信息   项目