2016-07-08 1 views
0

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

Моя схема

var UserSchema = new Schema({ 
    username: { type: String, required: true, unique: true }, 
    firstName: { type: String, required: true }, 
    lastName: { type: String, required: true }, 
    email: { type: String, required: true, unique: true, lowercase: true }, 
    phone: { type: Number, min: 10, unique: true }, 
    hash: String, 
    salt: String 
}); 

var ClassifiedSchema = new Schema({ 
    title: { type: String, required: true, unique: true }, 
    description: { type: String, required: true, }, 
    price: { type: Number, required: true }, 
    created: { type: Date, default: Date.now }, 
    updated: { type: Date, default: null }, 
    contact: { 
     name: String, 
     phone: Number, 
     email: String 
    }, 
    image: String, 
    user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } 
}); 

Мой маршрут

router.route('/classifieds') 
     .post(function(req, res) { 
      var classified = new Classified(req.body); 

      classified.save(function(err, classified) { 
       if (err) 
        res.send(err); 
       res.json(classified); 
      }); 
     }) 
     .get(function(req, res) { 
      Classified.find(function(err, classifieds) { 
       if (err) 
        res.send(err); 
       res.json(classifieds); 
      }); 
     }); 

router.route('/register') 
     .post(function(req, res) { 
      if (!req.body.username || !req.body.password || !req.body.email || !req.body.firstName || !req.body.lastName) { 
       return res.status(400).json({message: 'Please fill all the fields!'}); 
      }; 

      var user = new User(req.body); 
      user.setPassword(req.body.password); 

      user.save(function(err, user) { 
       if (err) 
        res.send(err); 
       res.json({ token: user.generateJWT()}); 
      }); 
     }); 

    router.route('/login') 
     .post(function(req, res) { 
      if (!req.body.username || !req.body.password) { 
       return res.status(400).json({ message: 'Please fill all the fields!' }); 
      }; 

      passport.authenticate('local', function(err, user, info) { 
       if (err) 
        res.send(err); 
       if (user) { 
        return res.json({ token: user.generateJWT() }); 
       } else { 
        return res.status(401).json(info); 
       }; 
      })(req, res); 
     }); 

Я хочу знать, как я могу получить имя пользователя при отправке классифицированного? Я знаю о функции заполнения, но я пробовал ее, и она, похоже, не работает.

Update

Я добавил мою регистрацию и вход маршрут, чтобы показать вам использование паспорта.

ответ

0

Если у вас есть система аутентификации, как passport который устанавливает req.user для текущего вошедшего пользователя, то:

.get(function(req, res) { 
     Classified.find({user: req.user},function(err, classifieds) { 
      if (err) 
       res.send(err); 
      res.json(classifieds); 
     }); 
    }); 
+0

Да я использую паспорт, но я всегда получаю неопределенными всякий раз, когда я пытаюсь получить доступ req.user –

+0

@ fahad.kazi Пользователь зарегистрирован? –

+0

Да, я попытался добавить классификацию, когда пользователь вошел в систему, и попробовал распечатать req.user на консоли. Я не определился. –

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