Задать вопрос
@hats

Почему после вызова callback не вызывается следующий за ним action?

Коллеги, у меня возникла проблема с Passport.js следующего плана.
У меня есть локальная стратегия аутентификации, которая должна выполнять авторизацию пользователей в системе. Ее код ниже.
passport.use 'local-login', new LocalStrategy
    usernameField: 'email'
    passwordField: 'password'
    passReqToCallback: true
  ,
  (req, email, password, done) ->
    # find a user whose email is the same as the forms email
    # we are checking to see if the user trying to login already exists
    User.findOne { 'email' :  email }, (err, user) ->
      # if there are any errors, return the error before anything else
      return done err if err?
      # if no user is found, return the message
      return done null, false, req.flash('loginMessage', 'Пользователь не найден.') unless user?

      # if the user is found but the password is wrong
      if not user.validPassword(password)
        return done null, false, req.flash('loginMessage', 'Пользователь с таким email и паролем не обнаружен.')

      # all is well, return successful user
      done null, user

С виду, никакого криминала в ней нет. Везде вызывается callback done. Везде в первом значении стоит null.

Есть файл с маршрутами. И в нем указан следующий код для данной стратегии авторизации.
router.post '/login.html', passport.authenticate('local-login'), controller.loginCreate

По идее, в начале отрабатывает функция passport.authenticate('local-login'), а потом, должна вызываться следующая в цепочке функция controller.loginCreate. Но этого не происходит если я возвращаю функцию done в следующем виде:
done null, false, req.flash('loginMessage', 'Пользователь с таким email и паролем не обнаружен.')

Если вызывается в виде:
done null, user
, то все нормально.

По какой причине могут возникнуть такого рода ошибки? Ведь, если судить по документации, то все должно работать...

Может быть есть какие-нибудь идеи?

Буду признателен за любую помощь в решении данной проблемы.
  • Вопрос задан
  • 2311 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@hats Автор вопроса
Из данной ситуации нашел вот такой выход:
router.post '/login.html', passport.authenticate('local-login', {failureRedirect : '/login.html'}), controller.loginCreate

Т.е., необходимо обязательно указывать на какой маршрут должно происходить перенаправление в случае возникновения ошибки валидации при аутентификации пользователя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы