在AJAX呈现的内容中,Laravel CSRF令牌为空

时间:2017-08-11 00:32:18

标签: laravel-5 csrf

" laravel / framework":" 5.4。*", " laravelcollective / html":" ^ 5.4",

我有一个包含删除按钮的视图部分,并且通常和通过AJAX请求呈现。在后者之后,这些按钮的表单在呈现部分时不会获得CSRF令牌。隐藏的输入值为空,在随后使用时会导致TokenMismatchException

请注意,这些按钮的表单不要使用AJAX。我的问题与告诉javascript从元标记中获取令牌并将其包含在AJAX请求中无关。这很好。这些表格是按照正常的老式学校要求提交的。 (删除后页面重新加载时,内容会在正确的页面加载。)

导致新部分呈现的分页请求将转到API命名空间中的控制器。因此,我尝试添加" web"中间件到api.php中的路由:

Route::middleware(['auth:api', 'web']) ...

这确实导致令牌值显示在删除表单中。但是,正如我非常肯定会发生的那样,它与先前在元标记中设置的那个不匹配。

将令牌传递给FormBuilder的构造函数。我可以在控制器中(在分页请求中)将令牌传递给View,这样它最终会在呈现部分之前传递给FormBuilder吗? (我不清楚FormBuilder在何时/何时被实例化。)

另一个想法可能是在分页请求中包含令牌,将其作为视图变量从控制器传递,并手动创建令牌输入。 (有一些逻辑只能用于ajax请求。)

但是,这看起来很丑陋。我想在追求它之前再考虑一下,并希望有人可能知道如何实现前者(或更好的)解决方案。

1 个答案:

答案 0 :(得分:0)

我发现了一个非常简单的解决方案,尽管它不是Laravel特有的。我能做的是让分页组件从元标记中获取标记,然后检查传入的html片段是否存在任何_token隐藏字段并根据需要应用该值。