问题描述
我正在尝试设置注销路线。
我发现了很多刀片语法(like that),但没有使用 vuejs。因此,我尝试通过插入一个带有 csrf 标记值且名称设置为“_token”的输入来复制刀片语法的结果。 (csrf 变量包含位于 XSRF-TOKEN cookie 中的字符串)。
当我发帖时,控制台中出现此错误: POST http://localhost:3000/注销419(状态未知)
你能告诉我我的错误在哪里吗?如何正确注销并重定向到我选择的页面?
<form method="POST" :action="$route('logout')">
<input type="hidden" name="_token" :value="csrf">
<button type="submit">logout</button>
</form>
解决方法
我找到了解决方案。
我的错误在于恢复不好的 csrf 令牌。 我将检索包含在 XSRF-TOKEN cookie 中的长字符串,而我必须从我的后端接收令牌。这两个字符串完全不同,出于某种我还不知道的原因。
我只需要使用 csrf_token() 方法将 csrf 令牌发送到我的前端
return Inertia::render('Dashboard',[
'publications' => $publications,'users' => $users,'csrf_token' => csrf_token()
]);
我也不需要手动填写表格
最后,我能够获取令牌作为道具并将其包含在我的帖子请求中,如下所示:
this.$inertia.post('/logout',{
_token: this.$props.csrf_token
})
,
我认为有更好的方法来做到这一点。我会和你分享一个想法。
关于代币
没有必要像您一样由后端向前端共享令牌。
关于Vue组件中的代码
由于您的表单,注销无效。
您的表单发布
<form method="POST" :action="$route('logout')">
<input type="hidden" name="_token" :value="csrf">
<button type="submit">Logout</button>
</form>
表单POST的最佳方式
<form @submit.prevent="logout()">
<button as="button" type="submit">
Logout
</button>
</form>
如您所见,当您提交表单时,它会调用 vue 组件的一个名为“注销”的方法。方法:
export default{
// Some code...
methods:{
logout() {
this.$inertia.post(route('logout'));
},}
}
以这种方式进行注销过程,所有的逻辑注销都会由服务器端来处理。您不必担心令牌。
希望对你有用。我也感谢你,因为我刚刚找到了这个解决方案,因为你的回答。