Исключить поле из схемы mon goose при создании - PullRequest
0 голосов
/ 17 января 2020

Я получил эту схему:

const userSchema = mongoose.Schema({
    name: {
        type: String,
        required: true,
        trim: true
    },
    email: {
        type: String,
        required: true,
        unique: true,
        lowercase: true,
        validate: value => {
            if (!validator.isEmail(value)) {
                throw new Error({error: 'Invalid Email address'});
            }
        }
    },
    password: {
        type: String,
        required: true,
        minLength: 7,
        select: false
    },
    tokens: [{
        token: {
            type: String,
            required: true
        },
    }]
});

and controller for creating the user:

const register = async (req, res) => {
    try {
        const user = new User(req.body);
        await user.save();
        const token = await user.generateAuthToken();
        res.status(201).send({user, token});
    } catch(error) {
        res.status(400).send({error});
    }
}

в ответ появляется вся информация, включая пароль, которая опасна для меня. Каков предпочтительный способ сделать это? Я знаю о ДТО, но не хочу иметь его на проекте. Я не запрашиваю базу данных, поэтому я не могу использовать исключение, выбор или другие методы, которые могут избавиться от пароля.

1 Ответ

2 голосов
/ 17 января 2020

У вас уже есть опция select: false для поля пароля, поэтому она не будет извлечена в методах поиска.

Для проблемы в реестре вы можете удалить пароль пользователя следующим образом:

    try {
        const user = new User(req.body);
        await user.save();
        const token = await user.generateAuthToken();
        delete user.password;
        res.status(201).send({user, token});
    } catch(error) {
        res.status(400).send({error});
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...