Passport.js 失败信息未显示

3

我有passport.js身份验证,它可以接受正确的凭据,但不接受错误的凭据。

我试图让一个弹出消息在凭据不正确时出现。

我尝试了很多次,并按照文档进行尝试,但不能使其正常工作。似乎没有太多的内容,但无法完全搞定。

设置策略

var flash = require('connect-flash');

var app = express();
app.use(flash());

passport.use(new Strategy(
  function(username, password, cb) {
    db.users.findByUsername(username, function(err, user) {
      if (err) { return cb(err); }
      if (!user) { return cb(null, false, { message: 'Incorrect password.' } ); }
      if (user.password != password) { return cb(null, false, { message: 'Incorrect password.' }); }
      return cb(null, user);
    });
  }));

身份验证 - 提交和获取

//Log In Post request
app.post('/login.post',
  passport.authenticate('local', { successRedirect: '/home',
                                   failureRedirect: '/',
                                   failureFlash: 'Invalid log in, please try again' })
);


//Home route
app.get('/home', //Log in Home
  function(req, res) {
   res.render('home', { user: req.user });
 });
2个回答

1

试试这个:

// Login Process
router.post("/login", (req, res, next) => {
  passport.authenticate("local", {
    successRedirect: "/",
    failureRedirect: "/auth/login",

    failureFlash: true
  })(req, res, next);
});

调用(req, res, next);非常重要,否则整个程序将会卡住。

或者只是...router.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/auth/login', failureFlash: true })); - ADAMJR

0

可能是这样的吗?

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

愚蠢的问题是 var flash = require("connect-flash") 而不仅仅是 require("flash") 吗? - fedeteka
1
是的,我有那个,不过感谢你把它添加到这个例子中! - Coco12
req.flash("success", "测试样例"); 这样的简单测试可以工作吗? - fedeteka
我在主页(和其他页面)的app.get中添加了这个,但它没有起作用,没有错误,也没有通知。 - Coco12
请查看此存储库,其中包含LocalStrategy和flash的完整示例https://github.com/Colt/yelp-camp-refactored - fedeteka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接