Как я могу «разрешить» объект MogoDB в определенной структуре JSON в Nodejs? - PullRequest
0 голосов
/ 10 июня 2018

Предположим, следующая пользовательская схема в MongoDB (с использованием Mongoose / Nodejs):

var UserSchema = new Schema({
    email: {
        type: String,
        unique: true,
        required: 'User email is required.'
    },
    password: {
        type: String,
        required: 'User password is required.'
    },
    token: {
        type: String,
        unique: true,
        default: hat
    },
    created_at: {
        type: Date,
        default: Date.now
    },
});

// mongoose-encrypt package
UserSchema.plugin(encrypt, {
    secret: 'my secret',
    encryptedFields: ['email', 'password', 'token', 'created_at']
});

Теперь предположим, что я хочу вернуть пользовательский объект из конечной точки API.На самом деле, предположим, что я хочу вернуть пользовательские объекты из нескольких конечных точек API.Возможно, как отдельный объект, возможно, как связанная модель.

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

Я в основном из мира Laravel, где существуют такие вещи, как API Resources (https://laravel.com/docs/5.6/eloquent-resources). Я уже пытался реализовать пакет mongoose-hidden (https://www.npmjs.com/package/mongoose-hidden), чтобы скрыть пароль и токен, но, к сожалению, кажется, что это нарушает используемый мной пакет шифрования.

Я новичок в Nodejs и MongoDB в целом - есть ли хороший способ реализовать это?

1 Ответ

0 голосов
/ 10 июня 2018

Как защитить поле пароля в Mongoose / MongoDB, чтобы оно не возвращалось в запросе при заполнении коллекций?

Вы можете использовать это: Users.find ().выберите ("- пароль"), но это делается всякий раз, когда вы отправляете запрашиваемый элемент пользователю (res.json () ...), чтобы вы могли выполнять свои манипуляции с включенным этим полем и затем удалять его у пользователя, прежде чемотправить его обратно (это с использованием подхода обещания, лучшей практики).И если вы хотите, чтобы ваши изменения использовались по умолчанию, вы можете добавить «select: false» в поле пароля объекта схемы.

Надеюсь, это поможет:)

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