【发布时间】:2018-01-19 09:15:10
【问题描述】:
"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 请求。)
不过,这似乎很老套。在追求它之前,我想进一步考虑一下,并希望有人可能对如何实现前一个(或更好的)解决方案有所了解。
【问题讨论】: