当验证失败时,我处于登录表单中,我能够显示验证错误消息,但我不知道如何重新填充登录表单。
我希望用户在验证错误时不要再次输入他的电子邮件地址。
到目前为止我所做的就是尝试获取电子邮件值,因为我使用 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();时它显示空数组,电子邮件和密码未保存在闪存中,因此我无法填充 View 中的输入字段
当我收到错误消息时,我没有得到我的代码有什么问题,为什么不收到电子邮件和密码值。
或者有没有更好的方法在nodejs中重新填充表单
最佳答案
为什么不尝试这样的事情呢?
res.render("admin/index", {
layout: "loginSignup",
messages: messages,
hasErrors: messages.length > 0,
email: req.body('email') || '',
password: req.body('password') || ''
});
注意,这是假设路由安装在 app.post() 调用上并且您正在使用 bodyparser 中间件,如果您使用 app.get(),则在我的示例中将 req.body 更改为 req.params .
关于node.js - 验证失败时如何重新填充我的登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57057240/