【问题标题】:Express/passport - passport.authenticate is not a functionExpress/passport - passport.authenticate 不是函数
【发布时间】:2017-04-18 22:25:49
【问题描述】:

我是新来的 passport.js。 我一直在关注以下博客注册用户

https://scotch.io/tutorials/easy-node-authentication-setup-and-local

但每次我运行服务器并加载 /register 页面时,它都会显示上述错误

TypeError:passport.authenticate 不是函数 在 module.exports (/home/punit/Documents/****/routes/index.js:10:34) 在 Layer.handle [as handle_request] (/home/punit/Documents/****/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/home/punit/Documents/****/node_modules/express/lib/router/index.js:312:13) 在/home/punit/Documents/****/node_modules/express/lib/router/index.js:280:7 在 Function.process_params (/home/punit/Documents/****/node_modules/express/lib/router/index.js:330:12) 在下一个(/home/punit/Documents/****/node_modules/express/lib/router/index.js:271:10) 在/home/punit/Documents/****/node_modules/connect-flash/lib/flash.js:21:5 在 Layer.handle [as handle_request] (/home/punit/Documents/****/node_modules/express/lib/router/layer.js:95:5)

我已检查变量是否填充在 /routes/index.js 文件中。

var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
var session = require('express-session');

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

mongoose.connect("localhost:27017/****");

require('./models/strategies')(passport)

var app = express();

会话初始化如下

app.use(session({
  secret: '*******',
  resave: true,
  saveUninitialized: false
})); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session


app.use('/', routes);
app.use('/users', users);
app.use('/register', routes);

require('./routes/index')(app, passport)

strategy.js 文件如下

var LocalStrategy = require('passport-local').Strategy
var Profile = require('./profile.js')

var ex = function (passport) {

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

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

  passport.use('register', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
  },
  function(req, mobile, password, done) {
    process.nextTick(function() {
      return done(null, false);

    });
  }))
}

console.log(ex)

module.exports = ex;

和routes/index.js文件如下

module.exports = function (app, passport) {
  /* GET home page. */
  app.get('/login', function(req, res, next) {
    res.render('index', { title: 'Express' });
  });
  app.get('/register', function(req, res, next) {
    res.render('register', { title: 'Express' });
  });

  app.post('/register', passport.authenticate('register', {
    successRedirect: '/profile',
    faliureRedirect: '/register',
    faliureFlash: true // allows flash message
  }), function(req, res, err) {
    console.log(req)
  })

}

我们将不胜感激。

【问题讨论】:

    标签: javascript node.js express passport.js passport-local


    【解决方案1】:

    您应该在路由文件中使用路由器或传递app

    只有一个可以工作。

    //app.use('/', routes);
    //app.use('/users', users);
    //app.use('/register', routes);
    
    require('./routes/index')(app, passport)
    

    这样护照对象将在路由文件中可用。

    【讨论】:

      【解决方案2】:

      可能不是最佳答案,但应该适用于您的情况,请更改 strategy.js 文件:

      var LocalStrategy = require('passport-local').Strategy
      var Profile = require('./profile.js')
      
      var ex = function (passport) {
       return (
        passport.serializeUser(function (user, done) {
          done(null, user.id)
        });
      
        passport.deserializeUser(function (id, done) {
          Profile.findById(_id, function (err, user) {
            done(err, user)
          });
        });
      
        passport.use('register', new LocalStrategy({
          usernameField: 'email',
          passwordField: 'password',
          passReqToCallback: true
        },
        function(req, mobile, password, done) {
          process.nextTick(function() {
            return done(null, false);
      
          });
        }))
       )
      }
      
      console.log(ex)
      
      module.exports = ex;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-28
        • 1970-01-01
        • 2017-03-22
        • 1970-01-01
        • 2019-08-08
        • 2020-05-18
        • 2016-02-14
        • 1970-01-01
        相关资源
        最近更新 更多