如何解决Laravel CSRF在第二个第三个ajax请求上
在laravel应用程序中,我有一个用javascript提交的表单。我将{{ csrf_field() }}
添加到了表单中,并且正在使用VerifyCsrfToken
中间件。
第一个请求可以正常运行,并且符合预期。但是,如果我不刷新页面并重新发送相同的表单(例如,由于表单字段验证错误,则是 ),我的请求会出现419
错误。我认为是因为_token
在两个请求中都是相同的,并且在第一个请求中有些无效。
有没有一种方法可以防止csrf令牌在请求上失效,以便我可以在需要时重新使用它?
解决方法
如果您不使用Axios HTTP库(它包含在bootstrap.js文件中),则需要从先前请求的收到的cookie中手动更新CSRF令牌。
resources/js/bootstrap.js
文件中提供的Axios HTTP库使用加密的XSRF-TOKEN cookie的值自动发送X-XSRF-TOKEN标头。如果您不使用此库,则需要为应用程序手动配置此行为。
-编辑-
由于您的页面是缓存和静态的。要么失去缓存要么失去CSRF
在app\Http\Kernel.php
中注释中间件VerifyCsrfToken
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::class,// \Illuminate\Session\Middleware\AuthenticateSession::class,\Illuminate\View\Middleware\ShareErrorsFromSession::class,//\App\Http\Middleware\VerifyCsrfToken::class,<--- THIS ONE
\Illuminate\Routing\Middleware\SubstituteBindings::class,\App\Http\Middleware\CheckBlocked::class,],];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。