2012-08-30 57 views
2

我看到過類似的問題,但沒有解決方案爲我工作。我使用express 3和ejs進行模板。令牌被填充在HTML像這樣:Express + node CSRF Forbidden

<input type="hidden" name="_csrf" value="IS+SwCqr3j+vGW9QSqIk56ZC/"> 

這是我的模板的HTML像輸入字段:

<input type="hidden" name="_csrf" value=<%= token %>/> 

但是,當我提交表單,我得到

Error: Forbidden at Object.exports.error 

這裏是我主要的應用程序配置功能看起來像

app.configure(function() { 
    app.engine('.html', require('ejs').__express); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'ejs'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser()); 
    app.use(express.static(__dirname + '/public')); 
    app.use(express.session({ 
     store: new mongoStore({ 
      url:'mongodb://localhost/test', 
      maxAge: 300000 
     }), 
     secret: '076ee61d63ba104r4e34872411e433b2', 
     cookie: { 
      path  : '/', 
      httpOnly : true, 
      maxAge : 1000*60*60*24*30*12 
     } 
    })); 
    app.use(express.csrf()); 
    app.use(function(req, res, next){ 
     res.locals.token = req.session._csrf; 
     next(); 
    }); 
    app.use(app.router); 
}); 

會話正常工作,令牌正在被填充,所以我被困在現在要做的事情上。

回答

9

如果有人遇到這個問題,我忘了加上令牌

<input type="hidden" name="_csrf" value="<%= token %>"/> 
各地報價