Node.js 使用Lusca的hackathon启动器-计算/存储csrf值的位置?

Node.js 使用Lusca的hackathon启动器-计算/存储csrf值的位置?,node.js,express,Node.js,Express,我是Node的新手,所以如果这是一个noob问题,请原谅我。我试图在github上使用convert这个项目来使用ejs视图,但很难理解他们是如何创建csrf令牌的 我正在使用的种子项目- 使用lusca生成csrf 我在他们的种子项目中看到的代码(至少我认为相关的代码) var csrf=require('lusca').csrf(); /** *CSRF白名单。 */ //app.js var csrfExclude=['/url1','/url2']; //原始项目使用翡翠 app.s

我是Node的新手,所以如果这是一个noob问题,请原谅我。我试图在github上使用convert这个项目来使用ejs视图,但很难理解他们是如何创建csrf令牌的

我正在使用的种子项目-

使用lusca生成csrf

我在他们的种子项目中看到的代码(至少我认为相关的代码)

var csrf=require('lusca').csrf();
/**
*CSRF白名单。
*/
//app.js
var csrfExclude=['/url1','/url2'];
//原始项目使用翡翠
app.set('views',path.join('views');
应用程序集(“查看引擎”、“翡翠”)//我打算将其更改为ejs,但不知道从何处获取csrf值(如下所示)
应用程序使用(功能(请求、恢复、下一步){
//CSRF保护。
if(u.contains(csrfExclude,req.path))返回next();
csrf(请求、回复、下一步);
});
应用程序使用(功能(请求、恢复、下一步){
//使用户对象在模板中可用。
res.locals.user=req.user;
next();
});
应用程序使用(功能(请求、恢复、下一步){
//登录前记住原始目的地。
var path=req.path.split('/')[1];
if(/auth | login | logout | signup | font | favicon/i.test(路径)){
返回next();
}
req.session.returnTo=req.path;
next();
});
//路线控制员
app.get('/',homeController.index);
//在单独的控制器文件-home.js中
exports.index=函数(请求、恢复){
res.render('home'{
标题:“家”
});
};
//在他们的jade文件中-这被转换为html标记--
元(名称='csrf-token',内容=\u csrf)
//因此,值_csrf被转换为cRcgih7Vl1Ms2Xz0zgIeAyWwQm6s4kp3/8OS4=
我的困惑是_csrf标签从哪里取出来?我试着在所有的文件中使用grep键,但实际上并没有在任何地方看到它(可能遗漏了什么?)。我正在查看我的检查器,能够看到会话变量设置为req.session.\u csrfSecret=nLzJqL3YIAJVzA==,但这看起来与上面使用的键不同。基于/8OS4,我认为这个值实际上是在某个地方连接起来的

我的问题是-在翡翠模板中,这个_csrf值来自哪里?我看不到jade在js代码中的任何地方获取它(我看不到任何地方的响应中设置了_csrf)

或者,使用lusca创建和保持csrf值的正常方法是什么


谢谢你的帮助

我正准备回答这个问题,但看起来好像有人抢先了我一步:。如果其他人需要帮助,请发布此消息。

对不起,我想关闭此消息或原始答案的链接。看起来代码作者实际上回复了我在谷歌群组列表上的相同查询。你能更新你的链接指向这个原始答案来源吗?我会把这个标记正确的。没问题。只是想发布它,以防其他人需要引用它。
var csrf = require('lusca').csrf();

/**
 * CSRF whitelist.
 */

//app.js
var csrfExclude = ['/url1', '/url2'];

//original project uses jade
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');   //i'm going to change this to ejs, but don't know where to get the csrf value(below) from

app.use(function(req, res, next) {
  // CSRF protection.
  if (_.contains(csrfExclude, req.path)) return next();
  csrf(req, res, next);
});
app.use(function(req, res, next) {
  // Make user object available in templates.
  res.locals.user = req.user;
  next();
});
app.use(function(req, res, next) {
  // Remember original destination before login.
  var path = req.path.split('/')[1];
  if (/auth|login|logout|signup|fonts|favicon/i.test(path)) {
    return next();
  }
  req.session.returnTo = req.path;
  next();
});

//route controllers
app.get('/', homeController.index);



//in separate controller file - home.js

exports.index = function(req, res) {
  res.render('home', {
    title: 'Home'
  });
};


//inside their jade file - this is converted to html tag --- <meta name="csrf-token" content="cRcgih7Vl1Ms2Xz0zgIeAyWwQm6s4kp3/8OS4=">
meta(name='csrf-token', content=_csrf)

//so value _csrf is converted to cRcgih7Vl1Ms2Xz0zgIeAyWwQm6s4kp3/8OS4=