bcrypt.compare返回false以获取正确的密码

时间:2016-11-18 07:48:08

标签: node.js bcrypt

标题是自我解释的。我检查了一切,发送到服务器进行注册的密码和发送到服务器进行身份验证的密码是一样的。我甚至在哈希注册后立即尝试使用bcrypt.compare,并返回true。但每次我使用bcrypt.compare进行身份验证时,都会返回false。是的,我已经检查过,而且我总能找到合适的帐户。

app.post('/api/accounts/register', function(req, res, next) {
    bcrypt.hash(req.body.password, 10, function(err, hash) {
        let newAccount = Account.model({
            name: req.body.name,
            email: req.body.email,
            password: hash,
            gender: req.body.gender,
            address: req.body.address,
            phone: req.body.phone
        });

        newAccount.save(err => {
            if (err) {
                res.status(500);
            }
            res.json({
                account: getCleanUser(newAccount),
                token: generateToken(newAccount)
            });
        });
    })
});

app.post('/api/login', function(req, res, next) {
    Account.model.findOne({ email: req.body.email })
        .exec((err, account) => {
            console.log(account);
            if (err) return res.status(500);
            if (!account) {
                return res.status(404).json({
                    error: true
                });
            }
            bcrypt.compare(req.body.password, account.password, (err, valid) => {
                if (!valid) {
                    return res.status(404).json({
                        error: true
                    });
                }
                let token = generateToken(account);
                res.json({
                    account: getCleanUser(account),
                    token: token
                });
            });
        });
});

0 个答案:

没有答案