Подтвердить что ты не робот

Отобразить сообщение об ошибке аутентификации passport.js

У меня есть новый проект Sails.js с использованием Passport.js для аутентификации пользователей. У меня есть базовая проверка подлинности (что означает, что пользователь может зарегистрироваться и успешно войти в систему), но хотел бы отобразить соответствующее сообщение об ошибке в окне входа в систему, если они не вводят правильные учетные данные. Я не могу понять, как печатать сообщения об ошибках в представлении.

Здесь моя настройка. У меня есть 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 в качестве моего механизма шаблонов и хотел бы отобразить сообщение об ошибке в окне входа в систему так:

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

До сих пор я пробовал {{ failureMessage }} {{ message }} {{ req.flash.failureMessage }} {{ req.flash.err }} {{ req.flash.message }} безрезультатно. Итак, все это, чтобы сказать, как мне отобразить соответствующее сообщение об ошибке на мой взгляд? И еще лучше, как бы я выделил странное поле в моем представлении?

4b9b3361

Ответ 1

На первый взгляд, похоже, что паруса используют Express 3.0. В документах Passport (http://passportjs.org/docs) вам нужно будет явно добавить промежуточное программное обеспечение для поддержки flash (они рекомендуют https://github.com/jaredhanson/connect-flash).

Ответ 3

Не знаю, поможет ли это вам, Брэд.

fooobar.com/questions/416671/...

Я думаю, что в вашем вызове serializeUser вам нужно, чтобы оно было user[0].id, но я недавно отошел от паспорта, поэтому я мог ошибаться.

Ответ 4

По-моему, вы не включили экспресс-вспышки?

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

в вашем маршрутизаторе добавьте

req.flash(type, message);

и используя

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