没有get请求时如何处理csrf only post请求
how to handle csrf only post request when no get request
我的 CSM 中有一个删除 post 路由。 delete 不工作,因为检测到跨站点伪造,其他路由工作正常,因为有一对 GET POST
可用。对于删除路线,我只有一条 POST 路线。基于快递的cms.
谁能解决这个问题?这是我的代码示例
<form action="/admin/category/delete/{{this.slug}}?newMethod=DELETE" method="post">
<input type="hidden" name="_csrf" value="{{csrfToken}}">
<button data-toggle="tooltip" data-placement="top" title="Delete Folder"
class="mx-1 btn btn-danger btn-sm float-left"><i
class="fa fa-trash"></i></button>
</form>
csrfToken 未显示在值中
我认为这个问题的答案对以后的任何人都有帮助。我只是用 axios
解决了这个问题。很简单,传递csrf token throw meta tag,用
catch
const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
const deletebtn = document.querySelectorAll('.deleteBtn');
const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
function deletefunction() {
const slug = $(this).data('slug');
const config = {
method: 'POST',
url: `/admin/category/delete/${slug}`,
headers: {
'Content-Type': 'application/json;charset=UTF-8',
'Access-Control-Allow-Origin': '*',
'CSRF-Token': token,
},
};
axios(config).then((response) => {
if (response) {
window.location.href = response.request.responseURL;
}
});
}
if (deletebtn) {
deletebtn.forEach((btn) => {
btn.addEventListener('click', deletefunction, false);
});
}
在你的控制器中
delete: async (req, res) => {
const deleteId = req.params.slug;
await Category.destroy({ where: { slug: deleteId } });
return res.redirect('/admin/category');
},
里面 html
<button data-slug="{{this.slug}}"class="deleteBtn mx-1 btn btn-danger btn-sm float-left"><i class="fa fa-trash"></i></button>
我的 CSM 中有一个删除 post 路由。 delete 不工作,因为检测到跨站点伪造,其他路由工作正常,因为有一对 GET POST
可用。对于删除路线,我只有一条 POST 路线。基于快递的cms.
谁能解决这个问题?这是我的代码示例
<form action="/admin/category/delete/{{this.slug}}?newMethod=DELETE" method="post">
<input type="hidden" name="_csrf" value="{{csrfToken}}">
<button data-toggle="tooltip" data-placement="top" title="Delete Folder"
class="mx-1 btn btn-danger btn-sm float-left"><i
class="fa fa-trash"></i></button>
</form>
csrfToken 未显示在值中
我认为这个问题的答案对以后的任何人都有帮助。我只是用 axios
解决了这个问题。很简单,传递csrf token throw meta tag,用
const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
const deletebtn = document.querySelectorAll('.deleteBtn');
const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
function deletefunction() {
const slug = $(this).data('slug');
const config = {
method: 'POST',
url: `/admin/category/delete/${slug}`,
headers: {
'Content-Type': 'application/json;charset=UTF-8',
'Access-Control-Allow-Origin': '*',
'CSRF-Token': token,
},
};
axios(config).then((response) => {
if (response) {
window.location.href = response.request.responseURL;
}
});
}
if (deletebtn) {
deletebtn.forEach((btn) => {
btn.addEventListener('click', deletefunction, false);
});
}
在你的控制器中
delete: async (req, res) => {
const deleteId = req.params.slug;
await Category.destroy({ where: { slug: deleteId } });
return res.redirect('/admin/category');
},
里面 html
<button data-slug="{{this.slug}}"class="deleteBtn mx-1 btn btn-danger btn-sm float-left"><i class="fa fa-trash"></i></button>