没有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>