当验证失败时,我在登录表单中我能够显示验证错误消息,但我不知道如何重新填充登录表单。
我希望用户在出现验证错误时不要再次输入他的电子邮件地址。
到目前为止我所做的事情是我正在尝试获取电子邮件价值,因为我正在使用 connect-flash 从 passport.js 发回错误。
我的护照本地策略是。
passport.use(
"local.signin",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true
},
function(req, email, password, done) {
console.log("I am in passport");
req.checkBody("email", "invalid email")
.notEmpty()
.isEmail();
req.checkBody("password",'invalid password')
.notEmpty();
req.flash('email',email);
req.flash('password',password);
var errors = req.validationErrors();
if(errors){
var messages = [];
errors.forEach((error) => {
messages.push(error.msg);
});
console.log("errors: ", errors);
return done(null, false, req.flash("error", messages));
}
User.findOne({email:email}, (err, user) => {
if(err){
return done(err);
}
if(!user){
return done(null, false, {message: "No user found!"});
}
if(!user.validPassword(password)){
return done(null, false, {message: "Wrong Password"});
}
return done(null, user);
});
}
)
);
并且路由验证后重定向到的索引函数失败
exports.index = function(req, res) {
var messages = req.flash("error");
console.log("email: ",req.flash('email'));
res.render("admin/index", {
layout: "loginSignup",
messages: messages,
hasErrors: messages.length > 0,
email: req.flash('email'),
password: req.flash('password')
});
};
在这里,当我 console.log(); 它显示空数组,电子邮件和密码未保存在闪存中,因此我无法在视图中填充输入字段
我没有得到我的代码有什么问题,当我收到错误消息时,为什么不输入电子邮件和密码值。
还是有更好的方法在nodejs中重新填充表单