Javascript 通过REST端点使用JSON对象更新Mongoose模式

Javascript 通过REST端点使用JSON对象更新Mongoose模式,javascript,angularjs,node.js,mongodb,rest,Javascript,Angularjs,Node.js,Mongodb,Rest,我有一个与JSON对象(用户)一起提交的REST端点,我只是将相应的mongo记录设置为该JSON对象。这样就省去了更新服务方法和端点中的模式更改的麻烦,只剩下Mongoose模型需要更新 如果有的话,还有什么更安全的方法 示例用户JSON { 'fname': 'Bill', 'lname': 'Williams', 'email': 'bill@billwilliams.com', 'settings': { 'strokeColor': '#FF0000' }

我有一个与JSON对象(用户)一起提交的REST端点,我只是将相应的mongo记录设置为该JSON对象。这样就省去了更新服务方法和端点中的模式更改的麻烦,只剩下Mongoose模型需要更新

如果有的话,还有什么更安全的方法

示例用户JSON

{
  'fname': 'Bill',
  'lname': 'Williams',
  'email': 'bill@billwilliams.com',
  'settings': {
    'strokeColor': '#FF0000'
  }
}
来自我的角度服务

Update: function(my_user) {
  return $http.put('http://api.domain.com/v1/api/users/' + _user.id, {
    user: my_user,
    token: window.localStorage['token']
  });
}
api.route('/users/:user_id')
  .put(function(req, res) {

    User.findById(req.params.user_id, function(err, user) {
      userData = req.body.user;

      if (user) {
        //-- This is potential trouble area?
        User.update({'_id': user._id}, {$set: userData});

      user.save(function(err) {
          res.json({
            success: true,
            message: 'User updated'
          });
  }); //-- end findById()
}); //-- end /users/:user_id put() route
节点中的我的REST端点

Update: function(my_user) {
  return $http.put('http://api.domain.com/v1/api/users/' + _user.id, {
    user: my_user,
    token: window.localStorage['token']
  });
}
api.route('/users/:user_id')
  .put(function(req, res) {

    User.findById(req.params.user_id, function(err, user) {
      userData = req.body.user;

      if (user) {
        //-- This is potential trouble area?
        User.update({'_id': user._id}, {$set: userData});

      user.save(function(err) {
          res.json({
            success: true,
            message: 'User updated'
          });
  }); //-- end findById()
}); //-- end /users/:user_id put() route
看一看

它基本上是这样工作的:

  • 创建一个REST端点,该端点允许用户获取具有特定标记的令牌 有效载荷(例如id)
  • 使用Jsonwebtoken中间件保护api的相关部分(如果使用express作为Web服务器)
  • 用户将令牌添加到每个请求头(通过使用$httpInterceptor)
  • 在请求到达API之前,在服务器端检查令牌

  • 令牌可能会在一段时间后过期(当用户需要先注册时很有用),这会增加额外的安全性。

    我目前正在使用JWT,我更担心的是一个人是否会通过身份验证并以某种方式操纵自己的JSON并发布。好吧,我很好奇其他人会如何回答这个问题。顺便问一下:为什么要更新和保存用户。两者中的一个就足够了。您应该明确地验证该对象,以确保它只有特定用户可以更新/添加的密钥,并且允许该用户更新该特定用户记录。