#javascript #mongodb #mongoose #passwords
#javascript #mongodb #мангуст #пароли
Вопрос:
Итак, я пытаюсь скрыть объект пароля от отображения. Вот мой код, я использую bcrypt для удаления пароля. Я скрываю возвращаемый объект, но я не получаю ожидаемых результатов. Что я делаю не так, пожалуйста, помогите. Очень признателен. Спасибо.
var express = require('express')
var router = express.Router()
var User = require('../Models/User.js')
var bcrypt = require('bcrypt')
router.get('/:resource', function(req, res, next){
var resource = req.params.resource
if (resource == 'user'){
User.find(null, function(err, users){
if(err) {
res.json({
confimration: 'error',
message: err
})
return
}
res.json({
confimration: 'success',
message: users
})
return
})
}
})
router.post('/:resource', function(req, res, next){
var resource = req.params.resource
var data = req.body
var password = data.password
var hashed = bcrypt.hashSync(password, 10)
data['password'] = hashed
if(resource == "user") {
User.create(data, function(err, user){
if(err){
res.json({
confirmation: 'fail',
message: err
})
return
}
res.json({
confirmation: 'success',
result: user
})
return
})
}
})
module.exports = router
var mongoose = require('mongoose')
var UserSchema = new mongoose.Schema({
firstName: {type: String, lowercase: true, trim: true, default: ''},
lastName: {type: String, lowercase: true, trim: true, default: ''},
email: {type: String, lowercase: true, trim: true, default: ''},
city: {type: String, default: ''},
password: {type: String, default: ''},
timestamp: {type:Date, default: Date.now}
})
UserSchema.methods.summary = function() {
var summary = {
firstName: this.firstName,
lastName: this.lastName,
email: this.email,
timestamp: this.timestamp,
id: this._id,
city: this.city
}
return summary
}
module.exports = mongoose.model('UserSchema', UserSchema)
{
_id: "57f460235805b52762605df2",
__v: 0,
timestamp: "2016-10-05T02:06:27.829Z",
password: "$2a$10$DIHrMO8WcRmOkIVj93SSQ.LFe5vPYH6R3xrfsSuql.v2jfU2mcO.C",
city: "new york",
email: "4",
lastName: "4",
firstName: "4"
}
Комментарии:
1. Откуда вы пытаетесь скрыть свой пароль?
2. Я хочу вернуть все, кроме пароля. { _id: «57f460235805b52762605df2», __v: 0, временная метка: «2016-10-05T02:06:27.829Z», город: «Нью-Йорк», адрес электронной почты: «4», Фамилия: «4», Имя: «4» }
3. Где вы используете свой метод summary? Я даже не думаю, что это имеет значение. потому что, если вы говорите о скрытии пароля при ответе на запрос post, вы отправляете весь документ, который вы только что сохранили. Вы ничего не фильтруете.
4. Да, Джек. Как я могу это скрыть? также выполняю запрос get.
5. только для вас: npmjs.com/package/mongoose-filter-properties
Ответ №1:
для router.get
этого вы могли бы использовать поле проекции. Я не знаю, почему у вас null. но при этом find
выполняется поиск всех документов в коллекции пользователей и исключается поле пароля для каждого возвращенного документа. помогает ли это с router.get
?
if (resource == 'user'){
User.find({},{password: 0}, function(err, users){
if(err) {
res.json({
confimration: 'error',
message: err
})
return
}
res.json({
confimration: 'success',
message: users
})
return
})
}