javascript - 引用错误: hash is not defined in node. js

标签 javascript node.js undefined undefined-variable

我正在制作一个登录系统并使用 bcrypt 来哈希密码。但是现在,当我尝试登录时,我收到此错误,指出ReferenceError:未定义哈希。如果有人可以帮助我并告诉我在哪里以及如何声明哈希,我将不胜感激。 这是我的 login.js 代码。

var mysql = require('mysql');
var express = require('express');
var session = require('express-session');
var bodyParser = require('body-parser');
var bcrypt= require('bcrypt');
var path = require('path');
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'sahoolat1',
    database : 'fyp_sahoolat'
});
var app = express();
app.use(session({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
}));
app.use(bodyParser.urlencoded({extended : true}));
app.use(bodyParser.json());
app.get('/', function(request, response) {
    response.sendFile(path.join(__dirname + '/welcome.html'));
});
app.post('/auth', function(request, response) {
    var number = request.body.number;
    var password = request.body.pwd;
    
    if (number && password) {
        bcrypt.compare(password, hash, function(err, result) {
        connection.query('SELECT fyp_helpers.Mobile_number AS number FROM fyp_helpers WHERE Mobile_number = ? AND Password = ? UNION SELECT fyp_employers.Employer_Contact AS number FROM fyp_employers WHERE Employer_Contact = ? AND Employer_Password = ?', [number, password, number, password], function(error, results, fields) {
            if (error) {
                console.error("An error occurred:", error);
                response.send('Oops, something went wrong!');
            } else if (results.length > 0) {
                request.session.loggedin = true;
                request.session.number = number;
                response.redirect('/home');
            } else {
                 response.send('Incorrect Username and/or Password!');
            }           
            response.end();
        });

    });
}
        else {
        response.send('Please enter Username and Password!');
        response.end();
    }

});
app.get('/home', function(request, response) {
    if (request.session.loggedin) {
        response.send('Welcome back, ' + request.session.number + '!');
    } else {
        response.send('Please login to view this page!');
    }
    response.end();
});
app.listen(3000);

这是完整的错误:

ReferenceError: hash is not defined
    at C:\Users\palwasha\sahoolat-master\login.js:29:31
    at Layer.handle [as handle_request] (C:\Users\palwasha\sahoolat-master\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\palwasha\sahoolat-master\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\palwasha\sahoolat-master\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\palwasha\sahoolat-master\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\palwasha\sahoolat-master\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\palwasha\sahoolat-master\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\palwasha\sahoolat-master\node_modules\express\lib\router\index.js:275:10)
    at jsonParser (C:\Users\palwasha\sahoolat-master\node_modules\body-parser\lib\types\json.js:101:7)
    at Layer.handle [as handle_request] (C:\Users\palwasha\sahoolat-master\node_modules\express\lib\router\layer.js:95:5)

最佳答案

bcrypt.compare(密码、哈希值、回调)

bcrypt.compare 需要 3 个参数

  1. 输入的密码,在您的情况下为 request.body.pwd

  2. 您要与通常存储在数据库中的request.body.pwd进行比较的密码

  3. 比较后调用的回调

就您而言,您没有提供任何哈希密码,这就是显示错误的原因

请在此处查看文档 https://www.npmjs.com/package/bcrypt

我建议使用以下代码来验证密码

    if (number && password) {
    var sql = `SELECT 
            fyp_helpers.Mobile_number AS number,
            fyp_helpers.Password AS  Password
        FROM fyp_helpers 
        WHERE Mobile_number = ? 
    UNION 
        SELECT 
            fyp_employers.Employer_Contact AS number ,
            fyp_employers.Employer_Password AS Employer_Password
        FROM fyp_employers 
        WHERE Employer_Contact = ?`;
    connection.query(sql, [number, number], function (error, results, fields) {
        if (results.length > 0) {
            var hashedPassword = result[0].Password;
            bcrypt.compare(password, hashedPassword, function (cryptErr, cryptResult) {
                if (cryptResult) {
                    request.session.loggedin = true;
                    request.session.number = number;
                    response.redirect('/home');
                } else {
                    response.send('Incorrect Password!');
                    console.log(cryptErr);
                }
                response.end();
            });
        } else {
            response.send('User not registered');
        }
    });
}

希望这有帮助

关于javascript - 引用错误: hash is not defined in node. js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62593807/

相关文章:

javascript - Angular 2 : Array Comma in URL using Router

node.js - 如何通过 id 合并 Node.js 中的值数组?

mysql - 使用node.js从mysql查询大量数据时网页渲染失败

c++ - 体系结构 x86_64 Xcode Mac 的 undefined symbol

javascript - 带有 Leaflet 和 Python 后端的 TimeDimension

javascript - Angular - 将焦点放在动态创建的输入字段上

javascript - 谷歌地图无法正常显示

javascript - 渲染基本的 HTML View ?

Javascript 在知道字符串是什么时返回 "undefined"

javascript - Vimeo API 方法中的变量 `undefined`