2016-01-22 1 views
0

Пожалуйста, у меня есть паспорт установки ldapauth, который отлично работает со всеми параметрами, проблема в том, что имя пользователя или пароль неверны, он не выполняет дальнейшую проверку функции обратного вызова. Он просто останавливается. Из-за этого я не могу дать обратной связи пользователям, чтобы указать, что на самом деле неправильно. Есть ли какая-то подсказка, что мне не хватает? Это структураПаспорт-ldapauth не может выполнить проверку обратного вызова

passport.use('ldapStudent', new LdapStrategy({ 
     usernameField: 'username', 
     passReqToCallback:true, 
     server: { 
      url: '..........', 
      bindDn: '.............', 
      bindCredentials: '..........', 
      searchBase: '..............', 
      searchFilter: '.............', 
      searchAttributes: ['givenName','sn'], 
      tlsOptions: { 
       ca: [fs.readFileSync('./ssl/server.crt', 'utf8')] 
      } 
     } 
    }, 
    function (req, user, done) { 
     //now check from the DB if user exist 

     if(user){ 

      //check if user email exist; 
      User.findOne({'EmailAddress': user}, function (err, userdata) { 
       // In case of any error, return using the done method 
       if (err) 
        return done(err); 
       //user exist redirect to home page and send user object to session 
       if (userdata) { 
        //userActivity(PostActivity); 
        console.log(userdata); 
        return done(null, userdata); 
       }else { 
        //new user, add them to the user model 
        var newUser = new User(); 
        newUser.EmailAddress = req.body.username, 
         newUser.JoinedDate = Date.now(), 
         newUser.UserType = 'Student' 
        newUser.save(function (err, result) { 
         if (err) { 
          console.log('Error in Saving NewUser: ' + err); 
         } else { 
          console.log(result); 
          var PostActivity = { 
           ActivityName: req.res.__('Student Joined'), 
           ActivityDate: Date.now(), 
           UserID: result._id, 
           UserIP: (req.header('x-forwarded-for') || req.connection.remoteAddress) + ' Port: ' + req.connection.remotePort 
          }; 
          userActivity(PostActivity); 
          console.log('User Registration successful'); 
          return done(null, newUser, req.flash('SuccessMessage', req.res.__('You have been successfully Registered'))); 
         } 
        }) 
       } 
      }); 

     }else{ 
      return done(null, false, req.flash('ValidationError', req.res.__('Wrong password and/or email address'))); 

     }})); 

Это где я на самом деле проделайте Войти

router.post('/login', passport.authenticate('ldapStudent', { 
    successRedirect: '/', 
    failureRedirect: '/userlogin', 
    failureFlash: true 
})); 

код работает хорошо, так же, как я ожидаю, параметры для объекта опции LDAP намеренно опущены. Проблема в том, что учетные данные пользователя не верны, проверка обратного вызова не выполняется вообще, и поэтому я не могу вернуть флэш-сообщение, чтобы пользователь знал, что происходит

ответ

0

passport-ldapauthpassport-ldapauth не выполняет проверку обратного вызова если нет ничего, чтобы проверить, что происходит, если учетные данные неверны и пользователь не получен. В общем, как правило, стратегии имеют тенденцию работать, например. passport-local не выполняет проверку обратного вызова, если username or password is missing.

В комплект включены стратегии, passport-ldapauth, также обычно включают (настраиваемое) сообщение об ошибке. Общие настраиваемые сообщения об ошибках входа для passport-ldapauth перечислены in the documentation. Каждый из сообщений также имеет значение по умолчанию, так что даже если не настроило сообщение об ошибке вспышки устанавливаются (учитывая, конечно, что у вас есть flash middleware in use)

Кроме того, вы не предполагается использовать req.flash() в обратном вызове проверить но до supply an info message.

Смежные вопросы