Laravel 419未知状态

时间:2017-12-12 12:59:17

标签: php ajax laravel cors csrf

我正在从子域到主域发出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'),

因为cookies,即使老实说我也不确定它是做什么

1 个答案:

答案 0 :(得分:0)

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

 session.cookie_domain = ".example.com"

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

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

服务器到服务器的呼叫不可见,您可以保护它...例如,在网络级别,或者如果两个域通过互联网进行通信,则添加Oauth服务器。