2015-12-16 8 views
10

मैं passport में flash मैसेजिंग सीख रहा हूँ और जब मेरे स्क्रिप्ट चलाने इस त्रुटि पर अटक गया नहीं है:पासपोर्ट और कनेक्ट-फ्लैश: req.flash एक समारोह

:

req.flash is not a function 

यहाँ मेरी विन्यास है

var flash=require("connect-flash"); 
app.use(flash()); 

passport.use(new LocalStrategy(function(req,username, password,done) { 
process.nextTick(function() { 
    UserDetails.findOne({'username': username}, function(err, user) { 
     if (err) { 
      return done(err); 
     }   
     if (!user) { 
      return done(null, false,req.flash('message','Invalid username or password')); 
     } 
     if (user.password != password) { 
      return done(null, false,req.flash('message','Invalid username or password')); 
     } 
     return done(null, user); 
    }); 
}); 
})); 

मेरे मार्ग:

app.get('/', function (req, res) { 
res.render('login',{ message: req.flash('message') }); 
}); 

मेरे रणनीति:

app.post('/login', function(req,res,next){ 
passport.authenticate('local', function(err, user) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/')} 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
      arenderFunction(req,res); 
     }); 
    }) 
(req, res, next); 
}); 

किसी भी मदद की बहुत सराहना की जाती है!

उत्तर

10

अनुरोध वस्तु डिफ़ॉल्ट रूप से रणनीति कॉलबैक तक नहीं पहुंचेगी, तो आप इस के लिए passReqToCallback विकल्प निर्धारित करने की आवश्यकता:

passport.use(new LocalStrategy({ 
    passReqToCallback : true 
}, function(req, username, password, done) { ... })); 

यह here प्रलेखित है।

+2

विस्तृत करने के –

+0

@AryehArmon देखभाल काम करने के लिए प्रतीत नहीं होता? मुझे लगता है कि आपने ठीक से स्थापित किया है और कॉन्फ़िगर किया है ['कनेक्ट-फ्लैश'] (https://github.com/jaredhanson/connect-flash)? – robertklep

+3

मुझे अभी मेरी त्रुटि मिली है, मुझे app.use (फ़्लैश()) शामिल करना था; पोस्ट बीच के बर्तन से पहले। मैं passReqToCallback जोड़ने के बिना इसे काम करने में सक्षम था –

2

सेट फ़्लैश app.router के बाद

app.use(express.cookieParser()); 
app.use(express.session({ secret: "secret" })); 

//app.use(passport.initialize()); 
//app.use(passport.session()); // persistent login sessions 

app.use(flash()); 
app.use(app.router); 
संबंधित मुद्दे