【发布时间】:2017-09-02 02:06:34
【问题描述】:
我是 Mongoose 的新手。 我正在开发一个带有用户身份验证的 MEAN 堆栈待办事项列表。
(换句话说,用户可以注册登录并创建、获取、更新和删除待办事项)。
这意味着 2 个模式:“用户”和“任务” 一对多关系:一个用户可以有很多任务,很多任务属于一个用户。
这是“任务”架构的外观:
const TaskSchema = new Schema({
title:{
type: String,
required: true
},
owner:{
type: Schema.Types.ObjectId,
ref:'User'
}
});
为了构建 CRUD 方法,我需要 user._id 作为“所有者”属性,否则任何用户都可以访问任务列表、创建更新或删除任务,
为了得到 user._id 我在想两个选项:
-
前端的 Angular2 会从浏览器的 localStorage 中获取 user._id,以保持用户登录。
const user = localStorage.getItem('user');
然后将它发送到与我发送“标题”属性相同的对象中。 我认为这个选项太不安全了,因为前端的任何人都可以发送任何 id。
从会话中获取后端的当前 user._id。 (虽然我不知道该怎么做)。并将其包含在 POST 方法的新任务对象中,如下所示:
.post('/task', function(req, res, next){ function(req, res, next){
var task = new Task({
title: req.body.title,
owner : req.user._id /// Does not do nothing
});
if(!task.title){
res.status(400);
res.json({
"error":"Bad Data"
});
} else{
task.save(task, function(err, task){
if(err){
res.send(err);
}
res.json(task);
});
}
});
采用第二个选项(除非前者更好),您将如何构建 POST 方法? 具体来说,如何从会话中获取当前 user._id 并将其包含在新的 Task 对象中?
我期待尽快收到您的反馈。 谢谢。
【问题讨论】:
标签: node.js angular mongoose mean-stack mongoose-populate