我在使用csrf-csrf
替换csurf
时遇到了一个问题。令牌已成功生成。但当我提交表单时,它显示错误invalid csrf token
:
我的代码:
在应用程序js中
app.use((req, res, next) => {
res.locals.isAuthenticated = req.session.isLoggedIn;
res.locals.csrfToken = generateToken(res);
console.log(res.locals.csrfToken);
next();
});
鉴于:
<form class="login-form" action="/signup" method="POST">
...
<input type="hidden" name="_csrf" value="<%= csrfToken %>" >
<button class="btn" type="submit">Signup</button>
</form>
当我单击"注册"时,显示错误。
ForbiddenError: invalid csrf token
at doubleCsrf (/workspace/nodejs-practice/node_modules/csrf-csrf/lib/cjs/index.cjs:18:61)
at Object.<anonymous> (/workspace/nodejs-practice/app.js:24:5)
at Module._compile (node:internal/modules/cjs/loader:1165:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1219:10)
at Module.load (node:internal/modules/cjs/loader:1043:32)
at Function.Module._load (node:internal/modules/cjs/loader:878:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:22:47
有什么想法吗?谢谢你们!
更新:
我检查了csrf-csrf
的源代码。我发现它通过以下方式从请求中获取令牌
getTokenFromRequest = (req) => req.headers["x-csrf-token"]
在我的例子中,它将是未定义的。那么我如何将令牌添加到请求头中呢?
1条答案
按热度按时间gorkyyrv1#
我通过在doubleCsrf()中重写
getTokenFromRequest
来解决这个问题。我不得不说,要成为一名优秀的开发人员,我还有很长的路要走。
希望这对其他人有帮助。