WhatIsHTML
@WhatIsHTML
HTML программист

Как сокрыть секретную информацию о пользователе при авторизации(пароль, id)?

Делаю авторизацию по мейлу и паролю на серверной части (Node.JS). С базы данных (MongoDB) вытаскивается вся информация о пользователе включая id и пароль. Пароль хранится в хеш формате, но все равно его ни к чему отправлять на фронтенд, как и пароль.
Думал так :
- сделать отдельный объект userPublic с полями, которые будут идти на клиент
let dataPublic = {
    name: "",
    email: ""
}
module.exports = dataPublic;

- затем при авторизации, копировать в этот объект только те свойства, которые в нем объявлены, т.е. name, email
Object.assign(dataPublic, dataFromDb);
Проблема: в dataPublic копируются все свойства , в том числе те, которые не объявлены в нем.
Возможный выход: Можно вручную написать функцию.
Вопросы:
1.есть стандартные методы для этого?
2. Как лучше и более правильно реализовать то, что я задумал?
  • Вопрос задан
  • 422 просмотра
Решения вопроса 3
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
ПСЕВДОКОД:
User.find({
    email: req.body.email,
    password: User.hashPassword(req.body.password)
}, (err, user) => {
    if(err) {
        return res.status(400).json({error: err});
    }
    if(user) {
        let data = JSON.parse(JSON.stringify(user, ['allow', 'fields', 'in', 'array']));
        return res.status(200).json(data);
    }
});
Ответ написан
Комментировать
@Arik
Ответ написан
Комментировать
@SilvioMenuel
Object.assign(dataPublic, dataFromDb);
Проблема: в dataPublic копируются все свойства , в том числе те, которые не объявлены в нем.

А чего вы ожидали? :) Object.assign делает слияние двух объектов и все. Честно говоря, удивительно наивный вопрос, учитывая, что речь идет о node.js, angular и т.п.

Попробуйте так:
let dataPublic = {
    name: dataFromDb.name ,
    email: dataFromDb.email
}
module.exports = dataPublic;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@LiguidCool
А зачем вообще что-то отправлять клиенту? Как-бы должен клиент отправлять данные, а дальше он авторизуется по сессии.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы