【发布时间】:2021-08-29 06:43:34
【问题描述】:
我使用 Laravel 8 作为 APIrest,我试图在 ajax 请求中发送我的令牌,但在 laravel 中我得到空值,我不明白为什么。我在没有令牌的情况下登录或请愿没有问题。
在 JavaScript 中,我有一个这样的 AJAX 请求:(在发送令牌之前,我将其保存在 localStorage 中)
var settings = {
"url": apiUrl+"bookings/"+userIdentified.id,
"method": "GET",
"timeout": 0,
"headers": {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": token
},
};
$.ajax(settings).done((response) => {
console.log(response);
});
在 Laravel 中,我有一个包含以下内容的中间件:
// Check user identified
$token = $request->header('Authorization');
$jwtAuth = new \JwtAuth();
$checkToken = $jwtAuth->checkToken($token);
// If it is continue
if ($checkToken) return $next($request);
// If it is not then return an error
$data = array(
'status' => 'error',
'code' => '400',
'message' => $token, // I tested that and it return null
'test' => $request->all()
);
return response()->json($data, $data['code']);
路线:
Route::get('/bookings/{id}', [BookingController::class, 'getBookingsByUser'])->middleware('auth');
这是回应:
{
code: "400",
status: "error",
message: null, // that have to be the token for testing that exists and is not null
test: []
}
在网络控制台中:
GET https://my-url/api/bookings/4 400 (Bad Request)
- 在 laravel 中,我在 kernel.php 中注释了 VerifyCsrfToken 没有问题。
- 我在子域中有 api,但我在注册和登录时没有问题,无需令牌即可。由于某种原因,令牌没有到达我的 api :(
我有什么遗漏的吗?
【问题讨论】:
-
检查您的 chrome 开发工具网络选项卡,看看您是否在标头中发送令牌,可能是您的 JS 代码有问题并且没有向其中添加令牌,请在网络中检查标签。另外,小提示,在你的中间件上,不要做
if ($checkToken) return $next($request);,那个保护子句是错误的,做相反的事情,如果不行就返回错误,如果你继续没有错误,做return $next($request);。见this example。 -
令牌类型是什么?
标签: javascript php jquery laravel laravel-8