簡體   English   中英

錯誤:未知的身份驗證策略“本地”(Express&Passport)

[英]Error: Unknown authentication strategy “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使用它。 這是一個例子:

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('/');
    });
  });
});

請閱讀插件的文檔。 此外, 這是一個使用該auth策略的示例應用程序

嘗試在本地之后使用回調函數而不是傳遞對象。 像這樣的東西:

    router.post("/register", function(req, res){
      var newUser = new User({username: req.body.username});
      User.register(newUser, req.body.password, function(err, user){
          if(err){
              req.flash("error", err.message); //such as the username is taken or no username entered etc.
              res.redirect("/register");
          } else {
            passport.authenticate("local")(req, res, function(){
                res.redirect("/");
              });
            }
        });
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM