2016-05-17 218 views
0

我正在使用passport-local,但是當我嘗試它時,發送給我錯誤:req.flash不是函數。我一直在尋找如何解決這個問題,但沒有發現任何'req.flash'不是函數

,這是我的配置和代碼:

App.js

`...imports like body parser, express, etc 
    var passport = require('passport'); 
    var flash = require('connect-flash'); 

    ...app.js code 

    app.use(session({ 
    key : config.session.key, 
    secret : config.session.secret, 
    resave : false, 
    saveUninitialized : false, 
    cookie: { maxAge: 60000 } 
    })); 

    app.use(flash()); 

    app.use(passport.initialize()); 
    app.use(passport.session());` 

accountController.js

`var mongoose = require('mongoose'); 
var flash = require('connect-flash'); 
var User = require('../models/userSchema'); 

var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 

module.exports = function(passport){ 

    passport.serializeUser(function(user, done) { 
    done(null, user.id); 
    }); 

    passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
     done(err, user); 
    }); 
    }); 

    passport.use(new LocalStrategy({ 

    passReqToCallback : true 

    },function(req, username, password, done){ 
     User.findOne({ app_id : username }, function(err, user){ 
      if(err) { return done(err); } 
      if(!user){ 
       return done(null, false, { message: 'Id o contraseña incorrectos'}); 
      } 
      if(!user.validPassword(password)){ 
       return done(null, false, { message: 'Id o contraseña incorrectos'}); 
      } 
      return done(null, user); 
     }); 
    } 
)); 
};` 

account.js(路線)

`var express = require('express'); 
var router = express.Router(); 

var passport = require('passport'); 
require('../controller/accountController')(passport); 

var controller = require('../controller/accountController'); 

router.route('/(:err)?') 
    /*.get(controller.accountPage)*/ 
    .post(passport.authenticate('local',{ 

     successRedirect: '/dashboard', 
     failureRedirect: '/acount', 
     failureFlash: true 

    })); 


module.exports = router; 

回答

0

請確保:

app.use(passport.initialize()); 
app.use(passport.session());` 
app.use(flash()); 

在路由定義之前被調用。將這些行放在代碼中。您應該先定義護照配置(和閃光燈),然後定義路線。

另外,不要忘了,包括以下行(通過護照的配置文件):

require('./config/passport.js')(passport); 

希望這有助於!