CSRF 不匹配的令牌

CSRF Mismatched Token

我遇到 KeystoneJS 中 csrf 令牌不匹配的问题。 我在我的路线文件中使用这个:

keystone.pre('routes', keystone.security.csrf.middleware.validate);
keystone.pre('routes', keystone.security.csrf.middleware.init);

在我的客户端代码中,我设置了 x-csrf-token header 和 jQuery:

$.ajaxSetup({ headers: { 'x-csrf-token' :  '{{csrf_token_value}}' } });

现在我向路由文件中定义的路由发送 post 请求。我请求中的 csrf token header 和我的 cookie 是一样的。我错过了什么?

非常感谢! 丹尼尔

我的解决方案是制作一个元标记并用它来填充我的 ajaxSetup 方法。

<meta name="csrf-token" content="{{csrf_token_value}}">

$.ajaxSetup({
    headers: {
        'x-csrf-token': $('meta[name="csrf-token"]').attr('content')
    }
});

现在我的头和 cookie 中发送的令牌也不同(也许 cookie 中的令牌是用 KeystoneJS 加密的?)。

我不明白如果我将令牌直接放在我的 ajaxSetup 方法或元标记中为什么会有所不同?

如果有人能向我解释一下,我会很高兴。它肯定会改进这个答案,因为只有 'how' 是 adresed 而不是 'why'.