【问题标题】:CSRF token not working in a Laravel ajax callCSRF 令牌在 Laravel ajax 调用中不起作用
【发布时间】:2020-03-10 08:20:08
【问题描述】:

我已经检查了这个问题的无数答案,但由于某种原因我无法让它工作。

我得到错误:

401(未经授权)

我的路由是一个受保护的api路由。

我的数据:

let ajaxMainTemplate = {
  'mainTemplate': mainTemplate,
  'templateId': templateId,
  '_token': accessToken,
}

我的 ajax 调用:

$.ajax({
    type: 'POST',
    url:`../api/aiMainTemplate/${ajaxData.templateId}`,
    data: {
        _token: ajaxData._token,
        ajaxData
    },
    success: function(response) {
        console.log(response)
    }
})

我已经尝试根据另一个响应进行上述测试。我将令牌放在 ajaxData 对象之外。我犯了同样的错误。我也尝试过:

$.ajax({
    type: 'POST',
    url:`../api/aiMainTemplate/${ajaxData.templateId}`,
    headers: { 'X-CSRF-TOKEN': ajaxData._token },
    data: ajaxData,
    success: function(response) {
        console.log(response)
    }
})

一样。

我还通过添加console.log 来确认令牌存在,有什么想法我做错了什么吗?

【问题讨论】:

  • 当问题是由于 csrf 令牌引起时,laravel 通常返回 419,而不是 401。可能问题是因为您使用了一些您尚未在 ajax 帖子中完整归档的 api 身份验证
  • 啊,非常棒。 @Gamopo
  • 如前所述,401 不是令牌问题,所以也许这是别的问题,但是您使用ajaxData 传递令牌,但变量实际上是ajaxMainTemplate。此外,您在第一个 AJAX 示例中传递的 data 的结构看起来是错误的,应该只是 data: ajaxMainTemplate
  • 您好,方法中没有ajax调用,接收到的参数是ajaxData。

标签: laravel


【解决方案1】:

我的 url 在 api 保护路由后面,所以我必须进行 ajax 调用才能通过 ajax 登录。

凭据位于变量 ajaxData 中。

  $.ajax({
  type: 'POST',
  url: 'http://127.0.0.1:8000/api/login',
  data: ajaxData,
  success: function(response) {
     shopifyToken = response.success.token;
     getListProducts(shopifyToken);
  }
  });

使用从此登录生成的 shopify 令牌,它起作用了。

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2015-05-07
    • 2014-05-01
    • 2014-03-22
    • 2015-09-21
    相关资源
    最近更新 更多