【问题标题】:Laravel 8 api how to send token via AuthorizationLaravel 8 api如何通过授权发送令牌
【发布时间】: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


【解决方案1】:

您缺少指定令牌类型的bearer

变化:

"Authorization": token

收件人:

"Authorization": "bearer token"

此外,如果您正在发出 API 请求,请添加此标头:

"accept": "application/json"

【讨论】:

  • 原来如此,非常感谢!有一件事,现在在 php 中我有这个 token = "Bearer \"token\"",我只需要 token o 甚至带有 "" 的 token 都可以,但我不能拆分那个反斜杠。你知道怎么?我尝试了爆炸、stripslashes 和 str_replace('\\', '', $token) 但没有
  • @Toni - 创建一个新问题。我不确定你在问什么。请注意,当您看到 \" 时,引用已转义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 2021-03-07
  • 2014-06-30
相关资源
最近更新 更多