2016-02-23 7 views
1

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

app.post('/user/auth/login', passport.authenticate('local-login'), function(req, res) { 
    console.log("Login Request Successful"); 
    if(req.user){ 
     res.status(200).send(JSON.stringify({ 
      'msg' : "Successfully logged in" 
     })); 
    } 
    else{ 
     res.status(400) 
    } 
    //console.log(req.user); 
}); 

Это касается случая, когда после входа в Паспорт прикрепляет объект пользователя к модулю запроса. Но как я могу различать ошибку сервера и ошибку аутентификации Ошибка

Вот мое промежуточное программное обеспечение для проверки подлинности.

passport.use('local-login', new LocalStrategy({ 
    passReqToCallback: true 
}, function(req, username, password, done) { 

    Users.findOne({ 
     'emailId': username 
    }, function(err, user) { 
     if (err) 
      return done(err); 
     if (!user) 
      return done(null, false); 
     else if (passwordHash.verify(password, user.password)) { 
      console.log("User is verified"); 
      req.session.save(); 
      return done(null, user); 

     } else 
      return done(null, false); 
    }); 
})); 

В принципе, мне нужно получить доступ к сообщениям в функции done(). Как мне это сделать?

Как работает функция, например, если я нахожу неправильный пароль, сообщение, которое я получаю в своем браузере в Unauthorized. Это означает, что где-то он устанавливает для поля response.data значение Unauthorized. Вместо этого я хочу знать, когда есть ошибка, и вы хотите отправить мое собственное сообщение.

ответ

3

Я не знаю, что вы имеете в виду

доступа сообщений в функции проделанной

(), однако Вы можете очень хорошо делать с питающими добавления объекта с сообщением в проделанной callback

if (!user) { 
    return done(null, false, { 
       message: 'Unknown user or invalid password' 
    }); 
} 
if (!user.authenticate(password)) { 
    return done(null, false, { 
       message: 'Unknown user or invalid password' 
    }); 
} 
+0

Как-то в моем ответе.data в угловом поле сообщения не отображается. Любая возможная причина? –

+0

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

+0

Его полностью ваш вызов, как вы хотите отображать сообщение :) –

0

Другой метод. Я не знаю, как я пропустил это. В документах есть опция пользовательских обратных вызовов. Вот реализация того же.

app.post('/user/auth/login', function(req, res) { 
     passport.authenticate('local-login', function(err, user, info) { 
     if (err) { 
      res.status(500).send(JSON.stringify({ 
       'msg': "Internal Server Error" 
      })); 
     } 
     if (!user) { 
      res.status(401).send(JSON.stringify({ 
       'msg': "Username or Password is incorrect" 
      })); 
     } 
     if (user) { 
      res.status(200).send(JSON.stringify({ 
       'msg': "Successfully logged in" 
      })); 
     } 
    })(req, res, next); 
    }); 

Единственная проблема с этим решением заключается в том, что вам придется вручную войти в систему и создать сеанс и все такое.

  • Необязательного callback может подаваться, чтобы позволить приложению overrride способа по умолчанию, в котором попытка аутентификации обрабатываются. Обратный вызов имеет следующую подпись, где user будет установлен для аутентифицированного пользователя при успешной попытке аутентификации или false в противном случае. Будет передан необязательный аргумент , содержащий дополнительную информацию, предоставленную , для проверки обратного вызова стратегии.
app.get('/protected', function(req, res, next) { 
passport.authenticate ('local',function(err, user, info) { 
if (err) { return next(err) } 
if (!user) { return res.redirect('/signin') } 
res. redirect('/account'); 
})(req, res, next); 
}); 

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

+0

Интересно, однако я попытался ответить так, как вы хотели, чтобы это было с первой попытки :) –