Получение ошибки: строка не является допустимым хэшем BCrypt. был брошен, выдайте ошибку :) во время тестирования Mocha ExpressJS

У меня есть приложение стека MEAN, которое использует Passport для аутентификации.

Я пытаюсь написать модульный тест, который входит в систему и проверяет, перенаправлены ли вы в корень (/). Однако всякий раз, когда я запускаю Mocha, я получаю следующее сообщение об ошибке:

1) POST /home Login test should redirect to / after login:
   Error: the string "Not a valid BCrypt hash." was thrown, throw an Error :)

Вот мой модульный тест LoginSpec.js:

var should = require("should");
var app = require("../app");
var mongoose = require("mongoose");
var User = mongoose.model("User");
var request = require("supertest");
var agent = request.agent(app);
...
describe('POST /home', function() {
    before(function(done) {
        user = new User({
            email: "[email protected]",
            firstName: "John",
            lastName: "Doe",
            password: "strongPassword",
            username: "johndoe"
        });

        user.save(done);
    })

    describe('Login test', function() {
        it ('should redirect to / after login', function(done) {
            agent.post('/login')
                .send({
                    username: 'johndoe',
                    password: 'strongPassword'
                })
                .end(function(err, res) {
                    done();
                })
        })

        after(function(done) {
            User.remove().exec();
            return done();
        })
    })
})

Нужно ли мне BCrype мой пароль? Если да, то как мне это сделать?

Кроме того, почему некоторые онлайн-примеры входа в систему, которые я вижу, этого не делают? Например, NodeJS/Passport — Проверка входа пользователя с помощью mocha и superagent и Как аутентифицировать запросы Supertest с помощью Passport?


person FilmiHero    schedule 16.06.2015    source источник


Ответы (2)


Это происходит потому, что поле вашего пароля в базе данных содержит только строку, а не хешированную строку.

Это должно быть похоже на $2a$08$LMXAGOARNn4XmnC/rQuhfujrWVwgK/RuHuGpLtXvcv/yruY1v3yXa, но, вероятно, это просто исходный пароль.

person Tiago Gouvêa    schedule 21.07.2017

Я думал, что отвечу на это, так как у меня была такая же проблема, и я нигде не мог найти прямого ответа.

Когда вы определяете нового пользователя, вам нужно будет использовать bcrypt для шифрования этого пароля, а также, когда вы входите в систему, вам нужно будет использовать bcrypt для сравнения пароля с паролем, сохраненным в выбранном вами пользователе. В противном случае вы продолжите получать сообщение «Неверный хэш BCrypt».

Вот простая функция шифрования и сравнения, которую я использую в своем приложении.

UserSchema.methods.encryptPassword = function(password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(10));
}

UserSchema.methods.validPassword = function(password) {
    return bcrypt.compareSync(password, this.password);
}

Дополнительную информацию можно найти здесь: https://www.npmjs.com/package/bcrypt.

person Jordan    schedule 21.09.2016