【问题标题】:How to send Cross Domain Ajax POST with Laravel如何使用 Laravel 发送跨域 Ajax POST
【发布时间】:2019-03-09 04:10:01
【问题描述】:

我正在尝试使用 AJAX 从我的一个 Laravel 站点向另一个站点发送跨域 post call。

我看到的另一个主题解决了我在访问控制标头中遇到的第一个问题:Jquery: Cross-domain ajax 'POST' with laravel

我收到 419 错误,表示我没有使用 CSRF 令牌,但我使用的任何一个令牌(本地令牌或其他域令牌)都不起作用。

var CSRF_TOKEN = {{ csrf_token() }};
$.ajaxSetup( { headers : { 'X-CSRF-TOKEN' : CSRF_TOKEN } } );

var tracking_id = "{{ isset( $tracking_id ) ? $tracking_id : 'test-20' }}";
$.ajax({
    type: 'POST',
    url: 'https://example.com/beacon',
    crossDomain: true,
    data: { 'tracking_id': tracking_id },
    success: function(responseData, textStatus, jqXHR) {
        console.log( 'Click!' );
    },
    error: function (responseData, textStatus, errorThrown) {
        console.log( responseData );
    }
});

【问题讨论】:

  • “它不起作用”不是一个明确的问题陈述。发生什么了?报告了哪些错误?在浏览器中查看开发工具的网络选项卡。你得到你期望的请求了吗?您得到了预期的响应吗?
  • “Laravel 的跨域 Ajax POST”——你不知道。 Ajax 请求由浏览器中的 JavaScript 发送。你可以用 Laravel 响应请求,但不会用它发送请求。
  • "暗示我没有使用 CSRF 令牌,而是使用我使用的任何一个令牌(本地令牌或其他域令牌)" — 您发出请求的站点将关心其 CSRF令牌……但是 CSRF 令牌的目的是防止跨域触发请求,但是您是否有一个端点来发出 Ajax 请求以防止 CSRF?
  • crossDomain: true, 不会做任何事情,除非您发出相同的源请求并将 HTTP 重定向到不同的源。在您的代码中可能毫无意义。
  • @Quentin 我确实包含了错误代码及其含义。我知道 Laravel 不会拨打电话,但这正是我对标题的措辞。我使用了来自其他站点的 CSRF 令牌,这仍然给了我 419 错误作为响应。

标签: javascript jquery ajax laravel post


【解决方案1】:

在 VerifyCsrfToken.php 中排除路由将是您最简单的选择。然后,您可以制作中间件或其他方式来限制通过 ip、oauth 等的请求。

文档:https://laravel.com/docs/5.7/csrf#csrf-excluding-uris

【讨论】:

  • 从源 'api.mydomain2.es' 访问 XMLHttpRequest 在 'mydomain1.com/api/user/register' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 'Access-Control-Allow -Origin' 标头存在于请求的资源上。
  • 您必须更新您的内容安全策略才能接受来自其他域的请求。这是服务器配置问题developer.mozilla.org/en-US/docs/Web/HTTP/CSP
  • 但我必须在服务器上修复它?如何?顺便说一句,我让它工作,将我从 json 发送的数据更改为字符串作为参数... idk 为什么
猜你喜欢
  • 2015-02-03
  • 2013-01-05
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 2014-11-24
  • 2013-04-15
  • 1970-01-01
  • 2013-03-02
相关资源
最近更新 更多