Использование Chai для проверки того, был ли зашифрован пароль POST / пользователей

Мне трудно понять, как это работает. Я понимаю, как проверить и сопоставить простой текстовый пароль пользователя. Тем не менее, с шифрованием 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)
      })
    }
  },

Тест в настоящее время проходит, но я знаю, что он не правильный, может кто-нибудь помочь, пожалуйста, поймите это?

1 ответ

bcrypt имеет compare функция, которая проверяет текстовый пароль на соответствие хешу, чтобы увидеть, соответствует ли он, и перезванивает с любой ошибкой и логическим значением true/false. Вам нужно будет использовать это с объектом User, который вы извлекаете из БД, и проверить результат.

Другие вопросы по тегам