passport.authenticate不是一个函数

你好,我在NodeJs是新的,我一直在遵循这个教程http://code.tutsplus.com/tutorials/authenticating-nodejs-applications-with-passport–cms-21619创build一个应用程序进行身份validation。 我试图按照教程(代码是在github https://github.com/tutsplus/passport-mongo )所有的结构和代码,但是当我在浏览器中打开我的应用程序,我得到错误这个错误

TypeError:passport.authenticate不是module.exports的函数(C:\ myApp \ routes \ index.js:24:34)

这是我的index.js路由文件

var express = require('express'); var router = express.Router(); var passport = require('passport'); var isAuthenticated = function (req, res, next) { // if user is authenticated in the session, call the next() to call the next request handler // Passport adds this method to request object. A middleware is allowed to add properties to // request and response objects if (req.isAuthenticated()) return next(); // if the user is not authenticated then redirect him to the login page res.redirect('/'); } module.exports = function(passport){ /* GET login page. */ router.get('/', function(req, res) { // Display the Login page with any flash message, if any res.render('index', { message: req.flash('message') }); }); /* Handle Login POST */ router.post('/login', passport.authenticate('login', { successRedirect: '/home', failureRedirect: '/', failureFlash : true })); /* GET Registration Page */ router.get('/signup', function(req, res){ res.render('register',{message: req.flash('message')}); }); /* Handle Registration POST */ router.post('/signup', passport.authenticate('signup', { successRedirect: '/home', failureRedirect: '/signup', failureFlash : true })); /* GET Home Page */ router.get('/home', isAuthenticated, function(req, res){ res.render('home', { user: req.user }); }); /* Handle Logout */ router.get('/signout', function(req, res) { req.logout(); res.redirect('/'); }); return router; } 

可能问题在那里,也许路由是在某些版本的快速变化,但我不知道是什么问题。 你可以帮忙吗?

我有同样的问题。 看app.js. 必须有:

 var routes = require('./routes/index')(passport); 

你刚刚把括号放在错误的地方。 它应该是

 router.post('/login', passport.authenticate('login'), { successRedirect: '/home', failureRedirect: '/', failureFlash : true });