在视图中显示passport.js身份validation错误消息

我有一个新的Sails.js项目使用Passport.js来validation用户。 我有基本身份validation工作(意味着用户可以注册并成功login),但是如果他们没有input正确的凭据,则希望在login视图中显示相应的错误消息。 我无法弄清楚如何在视图中打印任何错误信息。

这是我的设置。 我有config/passport.js ,其中包含以下内容:

 var passport = require('passport'), LocalStrategy = require('passport-local').Strategy, bcrypt = require('bcrypt'); passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findOne({ id: id } , function (err, user) { done(err, user); }); }); passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password', passReqToCallback : true }, function(req, email, password, done) { User.findOne({ email: email }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Please enter a valid email address.' }); } if (!req.body.username) { return done(null, false, { message: 'Please enter your username.' }); } bcrypt.compare(password, user.password, function (err, res) { if (!res) { return done(null, false, { message: 'Invalid Password' }); } var returnUser = { username: user.username, email: user.email, createdAt: user.createdAt, id: user.id }; return done(null, returnUser, { message: 'Logged In Successfully' }); }); }); } )); 

然后我有api/controllers/AuthController.js ,其中包含以下内容:

 var passport = require('passport'); module.exports = { _config: { actions: false, shortcuts: false, rest: false }, login: passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login', failureFlash: true }), logout: function(req, res) { req.logout(); res.redirect('/login'); } }; 

再一次,如果用户填写正确的凭证,这是正常工作。 我正在使用Handlebars作为我的模板引擎,并希望在login视图中显示错误消息,如下所示:

 <div class="alert">{{ message }}</div> 

到目前为止,我已经尝试{{ failureMessage }} {{ message }} {{ req.flash.failureMessage }} {{ req.flash.err }} {{ req.flash.message }}无济于事。 所以,所有这一切说,我如何显示在我的看法适当的错误信息? 更好的是,我如何突出在我看来的错误领域?

乍一看,看起来像帆是使用Express 3.0。 根据护照文档( http://passportjs.org/docs ),您将需要明确添加中间件来支持Flash(他们推荐https://github.com/jaredhanson/connect-flash )。

这里不是护照专家,但根据这一点,您需要做的就是用req.flash('error')重新呈现login视图:

 res.render("login", {error: req.flash("error")}); 

然后在句柄模板中显示错误:

 {{ error }} 

不知道这是否会帮助你,布拉德。

https://stackoverflow.com/a/25151855/3499069

我认为在你的serializeUser调用中,你需要它是user[0].id ,但是我最近已经离开Passport,所以我可能是错的。

在我看来,你没有包含快递?

 var flash = require('connect-flash'); app.use(flash()); 

在你的路由器中添加

 req.flash(type, message); 

并使用

 var t = req.flash(type); res.render(view, {flashMessage: t});