нужна помощь на мангуст модели - PullRequest
0 голосов
/ 23 февраля 2019

Я новичок в mongoDB и mongoose.Но я пытаюсь получить доступ к пользователям, которые я сохранил в своей базе данных, по их электронной почте. Если пользователь был успешно извлечен, я сравню пароль, который он написал, с хешированным паролем, хранящимся в базе данных

это то, что у меня есть для моей схемы

UserSchema

var UserSchema = new Schema({
  firstName: { type: String, required: true }, //require makes it so that the fields can't be left blank
  lastName: {type: String, required: true},
  emailAddress: {type: String, required: true},
  password: {type: String, required: true}      
});
var User = mongoose.model("User", UserSchema);

Я использую пакет basic-auth в моем файле rout.js для тестированияэто API в почтальоне, это та часть, где я застрял, const user = User.find ({'emailAddress': credentials.name, user.emailAddress}); ЯВозникли проблемы при составлении запроса для доступа к электронной почте пользователя из базы данных

    //This middle-where function will authenticate users
const authenticateUser = (req, res, next) => {
  let message = null;

  // Parse the user's credentials from the Authorization header.
  const credentials = auth(req);

  // If the user's credentials are available...
  if (credentials) {
    // Attempt to retrieve the user from the data store
    // by their email (i.e. the user's "key"
    // from the Authorization header).
    const user = User.find({'emailAddress': credentials.name, user.emailAddress} );

    // If a user was successfully retrieved from the data store...
    if (user) {
      // Use the bcryptjs npm package to compare the user's password
      // (from the Authorization header) to the user's password
      // that was retrieved from the data store.
      const authenticated = bcryptjs
        .compareSync(credentials.pass, user.password);

в этом экспресс-маршрутизаторе. Я верну пользователя только после аутентификации

//GET /api/users 200, THIS WORKS IN POSTMAN
//This Route returns the currently authenticated user,     
router.get('/users', authenticateUser, (req, res) => {
  //within the route handler, the current authenticated user's information is retrieved from the Request object's currentUser property:
  const user = req.currentUser;
//we use the Response object's json() method to return the current user's information formatted as JSON:
  res.json({
    firstName: user.firstName,
    lastName: user.lastName,
  });
});

Может кто-нибудь помочь?Для справки это мой репо https://github.com/SpaceXar20/rest_api-mongo-p9

1 Ответ

0 голосов
/ 23 февраля 2019

здесь, как вы находите () неправильно, это должен быть либо обратный вызов, либо exec () с асинхронным ожиданием. В этом случае просто используйте обратные вызовы, поэтому вместо этого кода

const user = User.find({'emailAddress': credentials.name, user.emailAddress} );

используйте этокод

    User.find({emailAddress:user.emailAddress},(err,user)={
      if(err) throw err;
      // do what you please
    if (user) {

      bcrypt.compare(password,hash,function(err,isMatch){
    if(err) callback(err,null);
    callback(null,isMatch);

});
    } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...