2012-01-03 15 views
8

नौसिखिया। मैं एक्सप्रेसजेएस/नोड का उपयोग कर रहा हूं। यहाँ मेरी config सामान है:मैं एक्सप्रेस में सीएसआरएफ टोकन कैसे उत्पन्न करूं?

var express = require('express'), 
app = express.createServer(), 
jade=require('jade'); 
// Configuration 
app.configure(function(){ 
app.set('views', __dirname + '/views'); 
app.use(express.logger()); 
app.use(express.cookieParser()); 
app.use(express.session({ secret: "secretive secret" })); 
app.set('view engine', 'jade'); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(require('stylus').middleware({ src: __dirname + '/public' })); 
app.use(app.router); 
app.use(express.static(__dirname + '/public')); 
app.use(express.csrf()); 

मैं एक्सप्रेस निर्देशिका में csrf.js पाया, और देखते हैं कि यह उत्पन्न और req.body._csrf को सौंपा जाना चाहिए, लेकिन मैं इसे कैसे उपयोग करने के लिए यकीन नहीं है।

यहाँ csrf.js कोड

module.exports = function csrf(options) { 
var options = options || {} 
, value = options.value || defaultValue; 

return function(req, res, next){ 
// generate CSRF token 
var token = req.session._csrf || (req.session._csrf = utils.uid(24)); 

// ignore GET (for now) 
if ('GET' == req.method) return next(); 

// determine value 
var val = value(req); 

// check 
if (val != token) return utils.forbidden(res); 

next(); 
} 
}; 

सहायता है? धन्यवाद!

उत्तर

16

गतिशील सहायकों 3.x. के बाद से एक्सप्रेस से हटा दिया गया

नया उपयोग app.use(express.csrf()); होगा, जो Connect से आता है।

4

डायनामिक हेल्पर्स को टोकन जोड़ें।

app.dynamicHelpers({ 
    token: function(req, res) { 
    return req.session._csrf; 
    } 
}); 

इसे अपने जेड टेम्पलेट में संदर्भित करें।

input(type='hidden', value=token) 

स्रोत: http://senchalabs.github.com/connect/middleware-csrf.html

+0

धन्यवाद! उत्तम – bear

1

एक्सप्रेस 4.x इस मिडलवेयर को हटा दिया गया है। एक्सप्रेस 4.x के लिए आप इसे

var csrf = require('csurf'); 
app.use(csrf()); 

आह !! आपको अपने session और cookieParser मिडलवेयर के बाद csrf मिडलवेयर पंजीकृत करने की आवश्यकता है।

अंदर रूट या Ctrl

res.render('someform', { csrf: req.csrfToken() }); 

या आप दृश्य

input(type="hidden", name="_csrf", value="#{csrf}") 

आप से किया जाता है में तो

app.use(function(req, res, next){ 
    res.locals.csrf = req.csrfToken(); 
}); 

तब की तरह यह भी एक स्थानीय चर सेट कर सकते हैं !! :)

0

आप भी अपने CSRF टोकन है कि अपने दृश्यपटल द्वारा पढ़ा जा सकता के लिए एक सुरक्षित कुकी सेट करना चाहते हैं (उदाहरण के लिए कोणीय), तो आप ऐसा कर सकते हैं:

app.use csrf() 

app.use (req, res, next) -> 
    res.cookie('XSRF-TOKEN', req.csrfToken(), {secure: true}) 
next() 
संबंधित मुद्दे