Использование 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, который вы извлекаете из БД, и проверить результат.