我有这个模式:
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});
}
}
对此,有所有信息,包括密码,这对我来说很危险。这样做的首选方式是什么。我了解dto,但不想在项目中使用它。我不是在查询数据库,所以不能使用排除,选择或其他可以删除密码的方法。
答案 0 :(得分:2)
您已经有select: false
个密码字段选项,因此不会在find方法中检索它。
对于注册中的问题,您可以像这样从用户中删除密码:
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});
}