我正在尝试使用csurf和使用CSRF保护express.我的应用程序使用Angular作为前端,所以我认为将此添加到我的应用程序就足够了:
app.use(cookieParser('test secret'));
app.use(cookieSession({
secret: 'test secret'
}));
app.use(csrf({
cookie: {
key: 'XSRF-TOKEN'
}
}));
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试发出POST请求时,我得到403("无效的CSRF令牌")错误.据我所知,这个问题所在的csrf-tokens模块:在第44行中,expected变量看起来像qMnHLQGhivxECx5WtwuktDNA-snimacq30z-XNh2X-KTpdlkU6Og,而secret与token变量的样子qMnHLQGhivxECx5WtwuktDNA.由于expected和token不同,发生403错误.
到目前为止,我已经尝试了以下方法:
secure: false和/或signed: true在我的csurf选项中cookie-session和cookie-parser中间件之前运行csurfnpm模块以防万一我可能会切换到基于会话的令牌,但是对于Angular来说这不会很顺利,我不确定它是否能解决我的问题.
有谁知道如何解决这个问题,或者原因可能是什么?
PS顺便说一句,我也注意到一个(可能是不相关的)问题:req.csrfToken()方法似乎返回一个字符串,其值是完全无关expected的值csrf-tokens或字符串存储在cookie中.