Как исключить поле пароля в ответе в mongodb? - PullRequest
0 голосов
/ 20 февраля 2020

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

        {
            "_id": "5e4e3e7eecd9a53c185117d4",
            "username": "rick",
            "email": "rick@gmail.com",
            "password": "$2b$10$/eD8g4jCw6Bx0.FNxFDADO5tc70AvUmK0H/7R/0JTyo2q9PcGAdOO",
            "createdAt": "2020-02-20T08:08:30.878Z",
            "updatedAt": "2020-02-20T08:08:30.878Z",
            "__v": 0
        }

Модель пользователя

const userSchema = new Schema({
    username: { type: String, required: true },
    email: { type: String, required: true },
    password: { type: String, required: true },
    posts: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "Post"
    }]
}, { timestamps: true })

listUser route

    listUsers: (req, res) => {
        User.find{}, (err, users) => {
            if (err) {
                return res.status(500).json({ error: "Server error occurred" })
            } else if (!users) {
                return res.status(400).json({ error: "No users found" })
            } else if (users) {
                return res.status(200).json({ users: users })
            }
        })
    }

Несмотря на то, что я объявил поле пароля в схеме пользователя, есть ли способ вернуть объект ответа без поля пароля? Я попробовал опцию selected: false в поле password в модели User, она работала, но когда я не смог войти в свое приложение. Должен быть какой-то другой путь.

Ответы [ 3 ]

0 голосов
/ 20 февраля 2020

Вы можете использовать что-то вроде этого:

UserSchema.set('toJSON', { transform: function(doc, ret, options) { delete ret.password; return ret;} });

Это дает вам возможность исключить одно поле из коллекции.

PS: 3 параметра указывают значения вашей схемы. Вы даже можете поставить параметр «Преобразование» при создании схемы.

0 голосов
/ 21 февраля 2020

Следующая операция находит документы в коллекции user и возвращает все поля и исключает поле password.

здесь ссылка mongodb для получения дополнительной информации.

let user = await User.find({},{password:0})

0 голосов
/ 20 февраля 2020

вы можете удалить это поле при выполнении запроса, например, приведенный ниже код находит пользователя на основе идентификатора и удаляет поле пароля. Пользователь, являющийся пользовательской схемой, надеюсь, это поможет

let user = await User.findById(id).select("-password");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...