【问题标题】:bcrypt.compare from bcryptjs always returns false来自 bcryptjs 的 bcrypt.compare 总是返回 false
【发布时间】:2021-09-29 03:57:52
【问题描述】:

我在 React 和 Node js 项目中使用 bcryptjs,但似乎无法让它返回 true。在所有在线验证器上,它使用密码和哈希返回有效。我已经验证了长度是正确的,但无法让它工作。

我的 HandleSubmit 函数:

        event.preventDefault();
        const self = this;
        const data = `username=${encodeURIComponent(this.state['username'])}&`;
        axios.post(`/test/do_login/${data}`)
            .then(function (response) {
                console.log("RESPONSE");
                console.log(response);
                bcrypt.compare(self.state.password, response.data).then(function (result) {
                    console.log(`PW: ${self.state.password}\nDATA:${response.data}\nRES:${result}`);
                    if (result) self.setState({ loginSuccess: true });
                });
            });
    }

在服务器上:

const express = require('express');
const bcrypt = require('bcryptjs');
const router = express.Router();

const regexp = /=(.+?)&/g



router.post('/do_login/:data', (req, res) => {
    var con = req.app.get('con');
    var args = [...(req.params.data).matchAll(regexp)];

    console.log(args);

    var username = args[0][1];

    query = `SELECT * FROM users WHERE username="${username}";`

    con.query(query, (err, result) => {
        if (err) throw err;
        console.log(result);
        if (result.length < 1) res.send("USERNAME_INV")
        else {
            res.send(String(result[0].pw).slice(0,59)); 

        };

    });
});

module.exports = router;

我正在使用 slice 删除数据库条目末尾的 \u000。它存储在 BINARY(60) 中

【问题讨论】:

    标签: javascript node.js reactjs hash bcrypt


    【解决方案1】:

    我认为您试图以错误的方式解决此问题。

    在您的 react 应用程序中,只需将带有正文有效负载(用户名和密码)的请求发布到您的服务器。而已。不要将凭据作为查询参数发送,这是不安全的。

    在你的 nodejs 应用程序中,你必须处理这个调用:

    • 将密码与将哈希(来自您的身体)的密码和存储在您的数据库中的密码(也哈希)进行比较
    • 将 cookie 或 access_token 发送到您的 react 应用程序,每次您调用服务器以获取下一个请求时都会发送这些信息。您必须创建一个中间件以检查 cookie 或 access_token。

    此外,请检查您的用户名字段以避免 sql 注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 2019-05-05
      • 2019-05-27
      • 2014-05-30
      • 2022-10-23
      • 2020-05-24
      相关资源
      最近更新 更多