javascript - 错误 : Unknown authentication strategy "local" (Express & Passport)

标签 javascript mongodb express passport.js passport-local

我正在尝试在 Express 应用中使用 Passport 身份验证。

router.get('/signup', (req ,res) => {
  res.render('signup');
});

router.post('/signup', function(req, res, next) {
  var username = req.body.username;
  var password = req.body.password;

  User.findOne({ username: username }, function(err, user) {

    if(err) { return next(err); }
    if(user) {
      req.flash('error', 'User already exists');
      return res.redirect('/signup');
    }

    var newUser = new User({
      username: username,
      password: password
    });
    newUser.save(next);
  });
}, passport.authenticate('local', {
  successRedirect: '/',
  failureRedirect: '/signup',
  failureFlash: true
}));

每次我尝试注册测试用户时,它都有效,但它向我显示如下错误:

Error: Unknown authentication strategy "local"

你能给我一些建议吗?

最佳答案

看起来您还没有设置 Passport 来使用您的 passport-local 策略。 您需要导入它,实例化它,然后指示 Passport 使用它。这是一个例子:

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

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));

router.post('/signup', function(req, res, next) {
  var username = req.body.username;
  var password = req.body.password;

  User.findOne({ username: username }, function(err, user) {

    if(err) { return next(err); }
    if(user) {
      req.flash('error', 'User already exists');
      return res.redirect('/signup');
    }

    var newUser = new User({
      username: username,
      password: password
    });
    newUser.save(next);

    passport.authenticate('local', { failureRedirect: '/signup' }),
     function(req, res) {
      res.redirect('/');
    });
  });
});

请阅读文档 here对于那个插件。 另外,here's an example app使用该身份验证策略。

关于javascript - 错误 : Unknown authentication strategy "local" (Express & Passport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39727340/

相关文章:

node.js - Backbone 与 Express.js 通信的最佳方式

javascript - 如果我定义了多个参数但只传入一个参数会怎样?

mongodb - 如何检查集合是否已更改?

mongodb - 如何从嵌套数组中获取不同的值?

javascript - 在express中运行一次异步函数

angularjs - Node JS MongoDB POST 错误

javascript - 鼠标移出 D3 后如何设置元素的默认颜色

javascript - RxJS:具有中止功能的生产者-消费者

javascript - 如何删除之前的数据

json - 使用 Python 从 MongoDB 文档创建 JSON 文件