【问题标题】:Error 419 when sending POST request to domain from subdomain从子域向域发送 POST 请求时出现错误 419
【发布时间】:2020-01-10 07:08:10
【问题描述】:

从 admin.example.com 向 example.com 发送请求后,我在响应中收到错误 419,反之亦然。

我在 config/session.php 中将 'domain' => env('SESSION_DOMAIN', null), 更改为 'domain' => '.example.com',,但这似乎没有任何改变。

admin.example.com CSRF 代码:

. . .
</head>
<body>
    {!! csrf_field() !!}
    @include('_nav')
    . . .

我希望响应是与请求相关的 JSON,但实际上我得到了一个 Laravel HTML 响应,上面写着“页面已过期”。我生成的 CSRF 令牌显然有问题。

请求:

【问题讨论】:

  • 你改成'domain' =&gt; '.example.com'后清除浏览器cookie了吗?
  • 是的,我在更改后清除了 cookie。所有域都是 cookie 中的“.example.com”。
  • 能否发一张chrome开发工具中applicationcookies标签的截图?
  • 这是 cookie:imgur
  • 发现不是CSRF token的原因,是子域发出请求时,页面无法访问cookies。我该如何解决?我返回dd($_COOKIE) 作为响应,它显示[]

标签: php laravel routes subdomain csrf


【解决方案1】:

问题在于您的 CSRF 令牌,如果您有发送请求的表单,则可以包含

<form>
    @csrf
</form>

其中的令牌,如果您没有表单,请尝试将其添加为您的 Ajax 调用中的数据索引。

 $.ajax({
    type: 'POST',
    url: "{{ url('/yourURL') }}",
    data: {
       _token : '{{ csrf_token() }}',
       formData : myArray,
    },

【讨论】:

  • CSRF 令牌是在请求中发送的。我使用$('input[name=_token]').val() 将令牌添加到请求中。
猜你喜欢
  • 2019-02-22
  • 2021-12-21
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多