419|PAGE在生产中过期,Laravel 9和Inertia的CSRF问题



部署后,当我尝试使用delete route时,会抛出以下错误:

419 | PAGE EXPIRED
Failed to load resource: the server responded with a status of 419 ()

触发路由的vue组件内部功能:

const destroyEvent = (record) => {
if (confirm('Delete event?')) {
Inertia.delete(route('admin.event.destroy', {
id: record.id,
title: record.title,
image_path: record.image_path,
}), { preserveScroll: true })
}
}

Web路由:

Route::delete('/admin/event/destroy', [EventsController::class, 'destroyEvent'])->name('admin.event.destroy');

请求似乎没有到达EventsController,我已经用dd()进行了测试。

根据这个堆栈问题,它可能是一个CSRF令牌问题。我试过那里提出的所有建议,但都无济于事。尽管评论:

AppHttpMiddlewareVerifyCsrfToken::class

从CCD_ 5移除CCD_。这是否表明存在CSRF问题?

从这个laracasts问题中,我还尝试添加:

public function boot()
{
if($this->app->environment('production') || $this->app->environment('staging'))
{
URL::forceScheme('https');
}
}

到CCD_ 8,问题没有得到改善。

知道怎么解决这个问题吗?

我找到了一个解决方法,使用form.delete而不是Inertia.delete:

const destroyEvent = (record) => {
if (confirm('Delete Event?')) {
const form = useForm({
id: record.id,
title: record.title,
image_path: record.image_path
})
form.delete(route('admin.event.destroy'), { preserveScroll: true })
}
}

了解form助手如何处理不同于InertiaCSRF将是有用的。

相关内容

  • 没有找到相关文章

最新更新