Php API调用在postman时返回,但在调用并登录到浏览器时返回500内部服务器错误
这与Laravel 5.4及其护照密码授予有关 我有获取访问令牌的路径供用户使用,这是完全正常的 如果当前访问令牌过期,我还有一个刷新令牌的路由 当我用邮递员赶路的时候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
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…(请参阅第三个代码块)。请确保查看的是请求头,而不是响应头内容类型。