【问题标题】:Using Chai to test if POST /users password was encrypted使用 Chai 测试 POST /users 密码是否被加密
【发布时间】:2017-03-02 17:24:37
【问题描述】:

我很难理解这是如何工作的。我了解如何检查和匹配用户的纯文本密码。但是,使用 bcrypt 加密,我需要进行数据库调用以检查密码是否实际上已加密? 这是我正在使用的代码:

describe('create (POST /users)', function () { 
   it('succeeds, with encrypted password', function (done) {
      chai.request(expressApp)
        .post('/users/')
        .send({
          email: 'johndoe@gmail.com',
          username: 'johndoe',
          first_name: 'John',
          last_name: 'Doe',
          password: '123456789',
          phone_number: '+1.888.12456'
        })
        .end((err, res) => {
          res.should.have.status(201)
          res.should.be.json
          res.body.should.have.property('id', 2)
          res.body.should.not.have.property('password')
          User.forge({ id: res.body.id })
             .fetch()
             .then((user) => {
               console.log(user.attributes.password) // prints 123456789     
               return bcrypt.compare(user.attributes.password, res.body.password).then (function (res) { 
               res.should.equal(true)
             })
           .fetch()
           .catch(err)
         done(err)
        })
    })

这是使用 Bookshelf.js 的用户模型的代码

  initialize () {
    this.on('saving', this.encryptPassword)
  },

  encryptPassword (model, attrs, options) {
    if (attrs.password) {
      return bcrypt.hash(model.attributes.password, 10).then((hash) => {
        model.set('password', hash)
      })
    }
  },

测试目前正在通过,但我知道它不正确,有人可以帮助我理解这一点吗?

【问题讨论】:

    标签: node.js express mocha.js chai bookshelf.js


    【解决方案1】:

    bcrypt 有一个compare 函数,它根据哈希值测试明文密码以查看它是否匹配,并以任何错​​误和布尔值 true/false 进行回调。您需要将它与您从数据库中提取的用户对象一起使用并测试结果。

    【讨论】:

    • 谢谢!肯定需要先检查文档。但是,我仍然在为仍然需要做的事情而苦苦挣扎。我更新了代码,但我仍然不确定从那里去哪里
    • 这就是你所需要的——如果 bcrypt.compare 的结果为真,那么用户中的加密密码与你正在测试的明文密码相匹配。
    猜你喜欢
    • 2011-07-02
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多