从子域向域发送 POST 请求时出现错误 419

Posted

技术标签:

【中文标题】从子域向域发送 POST 请求时出现错误 419【英文标题】:Error 419 when sending POST request to domain from subdomain 【发布时间】: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) 作为响应,它显示[] 【参考方案1】:

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

<form>
    @csrf
</form>

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

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

【讨论】:

CSRF 令牌是在请求中发送的。我使用$('input[name=_token]').val() 将令牌添加到请求中。

以上是关于从子域向域发送 POST 请求时出现错误 419的主要内容,如果未能解决你的问题,请参考以下文章

从 Angular 向 Asp.net 发送 post 请求时出现错误 405

尝试向 API 发送 POST 请求时出现属性错误 - Django

Python Post 请求 - 通过 Outlook API 发送文件时出现 415 错误

发送 post 请求时出现 CORS 错误,但在 Spring Boot 和 Reactjs 中未获取请求

Laravel 5.5 Axios POST 导致 419 错误

发出发布请求时出现NodeJS CORS错误