Laravel 419 未知状态

Posted

技术标签:

【中文标题】Laravel 419 未知状态【英文标题】:Laravel 419 unknown status 【发布时间】:2018-05-26 04:14:55 【问题描述】:

我正在从子域向主域发出 AJAX 请求。我已经设置了 CORS,以便将子域自动附加到允许的域列表中。我收到419 (unknown status) 错误,在转储错误后我发现我收到TokenMissmatchException

我也注意到这是真的,因为我也看到了:

"_token" => "h7I07Iv0m4sF7XHhXjtygnfCtITgzCi3Ml8lfT7Z" // <-- sent
"_token" => "N118Izko7j5uf851MpijBXInFLaUVicRdf9uw3h4" // <-- in session

当我在检查请求时在标头部分看到它时,显然我正在使用我的 AJAX 请求发送令牌。

我想有一些不匹配发生,因为我正在从我的子域遍历到我的域。

如何在我的主域和所有子域中对齐令牌,以免出现异常?

注意

所有 AJAX 路由都从

接收令牌
<meta name="csrf-token" content=" csrf_token() ">

将它附加到每个请求中

$.ajaxSetup(
    headers: 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    
);

编辑

我把它放在session.php

"domain" => "." . env('APP_URL'),

因为 cookie,尽管老实说我不确定它的作用

【问题讨论】:

移除 csrf 令牌 让我的应用受到 CSRF 攻击? 域和子域在同一个 laravel 安装? 是的,域路由在web.php内完成 您是否在 AJAX 调用之后为 ajaxSetup 委派事件? 【参考方案1】:

跨多个域的会话共享..... 可以进行一些调整。要使 cookie 在所有子域中可用,您需要将其分配给根域。

 session.cookie_domain = ".example.com"

就我个人而言,我会推荐一种不同的方法(但这也取决于我无法从您的问题中完全了解的其他因素......)

从/到同一个子域执行 ajax 调用(受 CSRF 中间件保护,标准 CSRF 使用) 在控制器上对您的主域执行服务器到服务器后端调用(例如 curl_exec )

服务器到服务器的调用不可见,您可以保护它...例如如果两个域通过 Internet 通信,则在网络级别或添加 Oauth 服务器。

【讨论】:

以上是关于Laravel 419 未知状态的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 AJAX Post Call 没有消息异常。第 203 行,Handler.php,419 未知状态

POST http://localhost:8000/offers-ajax/store 419 (未知状态) Laravel AJAX

Laravel 5.5 AJAX Post Call上没有消息异常。第203行,Handler.php,419未知状态

Laravel Axios 使用 Vue 失败,状态码 419

Vue + Laravel sanctum CSRF 令牌不匹配 419 错误

419 表单发布请求中的未知状态