CSRF不匹配令牌

时间:2016-05-31 18:07:32

标签: node.js csrf keystonejs

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

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

在我的客户端代码中,我使用jQuery设置了一个x-csrf-token标头:

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

现在我发送一个帖子请求到我的路线文件中定义的路线。我的请求标头中的csrf标记和我的cookie是相同的。我错过了什么?

非常感谢提前! 丹尼尔

1 个答案:

答案 0 :(得分:1)

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

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

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

现在我的标题和cookie中的令牌发送也不同(可能是Cookie中的一个是由KeystoneJS加密的吗?)。

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

如果有人可以向我解释,我会很高兴。肯定会把这个答案归结为只有“怎么样”而不是“为什么”。