node.js - 在 ejs 上显示来自 passport.js 的登录错误消息
问题描述
我的无知不允许我在 passport.js 上显示登录错误消息。我想将message
定义的内容传递给我的 ejs 登录页面passport.use
,但我迷失在流程中,因为我不确定谁在处理 done 函数,但我知道它以某种方式连接到passport.authenticate
.
似乎在failureRedirect
后台调用 res.render ,如果能够将来自 passport.use 的消息传递给它,那就太好了
我尝试设置 Flash 消息没有成功,但如果可能的话,我想避免这种情况。这是部分代码,主要是样板
passport.use(
new LocalStrategy((username, password, done) => {
User.findOne({ username: username }, (err, user) => {
if (err) {
return done(err);
};
if (!user) {
console.log("Incorrect username");
return done(null, false, { message: "Incorrect username" });
}
bcrypt.compare(password, user.password, (err, res) => {
if (res) {
// passwords match! log user in
console.log("Si pudiste logearte!!");
return done(null, user)
} else {
// passwords do not match!
console.log("Incorrect password");
return done(null, false, { message: "Incorrect password" })
}
})
});
})
);
router.post(
"/log-in",
passport.authenticate("local", {
failureFlash: false,
successRedirect: "/",
failureRedirect: "/log-in"
})
);
解决方案
你必须使用connect-flash
来显示消息。
npm install connect-flash
改为failureFlash
真。并且该错误将在视图中显示为messages.error
...
var cookieParser = require('cookie-parser');
var flash = require('connect-flash');
var app = express();
...
app.use(session({cookie: { maxAge: 60000 }}));
app.use(flash());
...
router.post(
"/log-in",
passport.authenticate("local", {
failureFlash: true,
successRedirect: "/",
failureRedirect: "/log-in"
})
);
推荐阅读
- r - 关于特定条件下 group_by 的总和
- java - 陈旧元素的 JSON 状态映射 - Selenium 和 Java
- python - Anaconda (Python) - Windows 10 上的 Cmder 集成
- pandas - 在 Chartify 中为分组条形图添加图例
- keras - 在 keras 中连接多个 CNN 模型
- scala - 带有函数式编程的 ConcurrentHashMap。暂停 unsafeRun 安全吗?
- javascript - 替换Javascript中的多个单词
- javascript - 仅在具有相同类名的特定项目上运行 Javascript 函数
- javascript - 如何使用 Node repl 读取环境变量
- angularjs - 将 IFormFile 更改为 IList
并发送 $http.post 请求。AngularJS、ASP.NET 核心