2015-12-16 16 views
10

我學習passportflash消息和運行我的劇本的時候就死在這個錯誤:護照和連接閃光: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護理闡述?我假設你已經正確安裝並配置了['connect-flash'](https://github.com/jaredhanson/connect-flash)? – robertklep

+3

我剛發現我的錯誤,我不得不包含app.use(flash());在郵件中間件之前。我能夠在不添加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);