在Sails Js App中将用户模型密码发送到客户端

时间:2014-11-14 01:02:11

标签: node.js sails.js

在学习Sailsjs时,我正在通过example Chat application code。但是,在成功登录或注册后,MainController中的函数执行这些操作似乎是将db中找到的或在db中创建的整个User对象通过res.send(user)行发送到客户端。

我在这里纠正吗?发送密码不是错误和不安全吗?

或者它刚刚没发送?如果是这样,怎么样?

login action from the api/controllers/MainController.js:

    login: function (req, res) {
        var username = req.param('username');
        var password = req.param('password');

        // Users.findByUsername(username)...
        // In v0.9.0 the find method returns an empty array when no results are found
        // when only one result is needed use findOne.
        Users.findOneByUsername(username)
        .done(function loginfindUser(err, usr){
          if (err) {
            // We set an error header here,
            // which we access in the views an display in the alert call.
            res.set('error', 'DB Error');
            // The error object sent below is converted to JSON
            res.send(500, { error: "DB Error" });
          } else {
            if (usr) {
              var hasher = require("password-hash");
              if (hasher.verify(password, usr.password)) {
                req.session.user = usr;
                res.send(usr);
              } else {
                // Set the error header
                res.set('error', 'Wrong Password');
                res.send(400, { error: "Wrong Password" });
              }
            } else {
              res.set('error', 'User not Found');
              res.send(404, { error: "User not Found"});
            }
          }
        });
      },

1 个答案:

答案 0 :(得分:1)

在您的用户模型的属性中添加toJSON功能,删除密码

module.exports = {

    attributes: {

        ...

        toJSON: function() {
            user = this.toObject()
            delete user.password
            return user
        }
    }
}

如果您正确加密用户的密码,将它们发送到客户端并不是可怕的,但它仍被认为是一种不好的做法。