2015-12-16 6 views
10

uczę flash wiadomości w passport i utknął na ten błąd, gdy uruchomiony mój skrypt:Paszport i połączyć-Flash: req.flash nie jest funkcją

req.flash is not a function 

Oto moja konfiguracja:

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); 
    }); 
}); 
})); 

Moja trasa:

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

Moja strategia:

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); 
}); 

Każda pomoc jest doceniana!

Odpowiedz

10

Obiekt żądania nie jest przekazywany do zwrotnego strategii domyślnie, należy ustawić opcję passReqToCallback na to:

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

Jest to udokumentowane here.

+2

nie wydają się działać –

+0

opieki @AryehArmon aby rozwinąć? Zakładam, że poprawnie zainstalowałeś i skonfigurowałeś ['connect-flash'] (https://github.com/jaredhanson/connect-flash)? – robertklep

+3

Właśnie znalazłem błąd, musiałem włączyć app.use (flash()); przed post-ware ware. udało mi się go uruchomić bez dodawania passReqToCallback –

2

Set błysk po 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);