Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php API调用在postman时返回,但在调用并登录到浏览器时返回500内部服务器错误_Php_Laravel 5_Passport.js - Fatal编程技术网

Php API调用在postman时返回,但在调用并登录到浏览器时返回500内部服务器错误

Php API调用在postman时返回,但在调用并登录到浏览器时返回500内部服务器错误,php,laravel-5,passport.js,Php,Laravel 5,Passport.js,这与Laravel 5.4及其护照密码授予有关 我有获取访问令牌的路径供用户使用,这是完全正常的 如果当前访问令牌过期,我还有一个刷新令牌的路由 当我用邮递员赶路的时候 http://192.168.10.10/refresh 我得到了这是有效的: "data": { "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOi...deleting most of it.", "expires_in": 600 } 但是,当我通过以下代码使用axi

这与Laravel 5.4及其护照密码授予有关

我有获取访问令牌的路径供用户使用,这是完全正常的

如果当前访问令牌过期,我还有一个刷新令牌的路由

当我用邮递员赶路的时候

http://192.168.10.10/refresh
我得到了这是有效的:

"data": {
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOi...deleting most of it.",
    "expires_in": 600
}
但是,当我通过以下代码使用axios从浏览器点击路线时:

let  headers = { 'Content-type': 'application/json' }
return axios.post("http://192.168.10.10/refresh", {headers: headers}).then(res => {
    if (res) return res;
        }).catch(err => {
            if (err) return err.response;
        });
我得到一个HTTP 500错误状态代码

我也在跟踪laravel日志中的错误,这是堆栈跟踪

[2017-08-30 07:21:41]local.ERROR:GuzzleHttp\Exception\ClientException:Client ERROR:
POSThttp://192.168.10.10/oauth/token
导致
400错误请求
响应: {“error”:“invalid_request”,“message”:“请求缺少必需的参数,包含无效的参数值,(截断了…) 在/home/vagrant/Code/work/vendorgraphs-api/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php中:113

此错误的另一部分是,它可能是一个格式错误的值

这对我来说毫无意义,我已经尝试了所有方法,从直接从PHP代码生成curl请求,到使用http_query_builder功能

Cache-Control →no-cache, private
Connection →keep-alive
Content-Type →application/json
这是邮递员的请求设置。我也从浏览器发送这些标题。有什么想法可能导致问题吗?这让我发疯

    public function refreshToken(Request $request) 
{     
    if (!is_null($request)) {
        $refreshToken = $request->cookie(self::REFRESH_TOKEN);

        $http = new Guzzle();
        $response = $http->request('POST','http://192.168.10.10/oauth/token', [
            'form_params' => [
                'grant_type' => 'refresh_token',
                'refresh_token' => $refreshToken,
                'client_id' => env("PASSWORD_GRANT_CLIENT_ID"),
                'client_secret' => env("PASSWORD_GRANT_SECRET"),
                'scope' => '',
            ]
        ]);
        $data = json_decode($response->getBody());
        $this->cookie->queue(
            self::REFRESH_TOKEN,
            $data->refresh_token,
            864000, // 10 days
            null,
            null,
            false,
            true // HttpOnly
        );

        return response()->json([
            'payload' => [
                'access_token' => $data->access_token,
                'expires_in' => $data->expires_in
            ]
        ]);

    } else {
        return response()->json("Could not refresh token", 401);
    }
}

这是邮递员请求的内容

这就是我困惑的地方

没有通过此POST请求传递任何参数。 CORS在我的api上启用,不接收飞行前错误。 两个请求的标题都相同。 唯一的区别是,邮递员和Axios被使用。
除了通过邮递员或浏览器发出请求的位置外,没有任何更改。

浏览器中的内容类型为text/html 而在postman中是application/json


将内容类型设置为application/json,它应该可以工作

使用chrome dev tools中的network选项卡检查来自js的请求的标题,并将这些标题与您的postman请求进行比较:)您是如何获得您的
\u令牌
,刷新返回什么?如果您可以粘贴一些信息,这将非常有用。您的日志是什么r工作的邮递员请求看起来像?关于错误代码。你有500个错误代码,另一边是400个错误代码。你确定你看到的是正确的日志消息吗?我认为它们在客户端和服务器端都应该匹配。除非有什么我不知道的。400个错误来自对服务器的内部http调用另一个url,导致抛出500个内部错误。浏览器中OP的axios代码正在将内容类型设置为application/json…(请参阅第三个代码块)。请确保查看的是请求头,而不是响应头内容类型。