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在appHttpKernel.php中注释中间件VerifyCsrfToken的行

protected $middlewareGroups = [
'web' => [
AppHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
// IlluminateSessionMiddlewareAuthenticateSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::class,
//AppHttpMiddlewareVerifyCsrfToken::class, <--- THIS ONE
IlluminateRoutingMiddlewareSubstituteBindings::class,
AppHttpMiddlewareCheckBlocked::class,
],
];

最新更新