【问题标题】:Updating Mongoose schema with JSON object via REST endpoint通过 REST 端点使用 JSON 对象更新 Mongoose 模式
【发布时间】:2016-02-02 22:09:09
【问题描述】:

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

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

用户 JSON 示例

{
  'fname': 'Bill',
  'lname': 'Williams',
  'email': 'bill@billwilliams.com',
  'settings': {
    'strokeColor': '#FF0000'
  }
}

来自我的 Angular 服务

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

我在 Node 中的 REST 端点

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

【问题讨论】:

  • 您绝对应该验证该对象以确保它仅具有允许特定用户更新/添加的键,并且允许用户更新该特定用户记录。

标签: javascript angularjs node.js mongodb rest


【解决方案1】:

看看Jsonwebtoken

它基本上是这样工作的:

  1. 创建一个 REST 端点,让用户可以使用特定的 有效载荷(例如 id)
  2. 使用 Jsonwebtoken 中间件保护 api 的相关部分(如果使用 express 作为网络服务器)
  3. 用户将令牌添加到每个请求标头(通过使用 $httpInterceptor)
  4. 在服务器端检查令牌请求到达您的 API

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

【讨论】:

  • 我目前正在使用 JWT,我更担心一个人是否确实获得了身份验证并以某种方式操纵自己的 JSON 并发布它。
  • 好的,我很好奇其他人会如何回答这个问题。顺便说一句:你为​​什么更新和保存用户。两者之一就足够了。
猜你喜欢
  • 2021-05-03
  • 1970-01-01
  • 2014-02-09
  • 2017-03-12
  • 2016-03-19
  • 1970-01-01
  • 2021-01-21
  • 2019-03-20
  • 1970-01-01
相关资源
最近更新 更多