javascript - 有什么方法可以在 Express 的 POST 请求中获取 csrf token 吗?

标签 javascript node.js express csrf csrf-protection

在我的应用程序中,我有一个来自 official docs 的代码,除了一个区别:我发送 xsrfToken 来响应 POST 请求,而不是 GET。

var cookieParser = require('cookie-parser')
var csrf = require('csurf')
var bodyParser = require('body-parser')
var express = require('express')

// setup route middlewares
var csrfProtection = csrf({ cookie: true })
var parseForm = bodyParser.urlencoded({ extended: false })

var app = express()

// we need this because "cookie" is true in csrfProtection
app.use(cookieParser())

app.post('/getCsrfToken', /*csrfProtection,*/ function (req, res) {
    // check credentials from request.body
    // and then 

    res.render('send', { csrfToken: req.csrfToken() })  //EXCEPTION: csrfToken is not a function 
})

app.post('/process', parseForm, csrfProtection, function (req, res) {
    res.send('data is being processed')
})

我面临鸡蛋母鸡问题:如果我启用 csrfProtection,我无法在没有 token 的情况下进入端点的代码,但如果我禁用它,req.csrfToken 将变得未定义。

我需要将 gerCsrfToken 端点设为 POST,因为我不想将密码公开为 url 参数。

最佳答案

问题已由csurf维护者回答,感谢您的快速回复!

https://github.com/expressjs/csurf/issues/133

(棘手的)解决方案是忽略此特定端点的 POST 方法

app.post('/authenticate', csrf({ cookie: true, ignoreMethods: ['POST'] }), function (req, res) {

关于javascript - 有什么方法可以在 Express 的 POST 请求中获取 csrf token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47502121/

相关文章:

mysql - NodeJS : Where to connect to the database in code?

javascript - 我如何在 Sequelize 中找到一小时外的值

node.js - 使用 nodejs、expressjs 和 socket.io 保存图像

javascript - 如何在客户端从服务器(Node JS 和 Express)接收和使用 JSON 对象?

javascript - 我应该为整个 SPA 使用单个模型对象还是为每个组件使用许多小模型?

javascript - 将鼠标悬停在 jquery 上时,图像不会变得不透明

javascript - Promise 队列中的 Bluebird-Queue 并发未按预期工作

javascript - typescript 值检查

javascript - 隐藏 html 中的链接

node.js - 用于 Node.js 脚本测试的 mocha 是否具有用于浏览器的 Mocha 的漂亮 html 输出?