Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 在nodejs中使用bcrypt登录_Html_Node.js_Authentication_Db2_Bcrypt - Fatal编程技术网

Html 在nodejs中使用bcrypt登录

Html 在nodejs中使用bcrypt登录,html,node.js,authentication,db2,bcrypt,Html,Node.js,Authentication,Db2,Bcrypt,我很难集成bcrypt来确保登录系统的安全 我基本上得到了用户输入的用户名、密码,并尝试将其与数据库中的散列密码进行比较。这是我的 const inputUsername = req.body.inputUsername; const inputPassword = req.body.inputPassword; var userLogin = "select * from login where USERNAME = ?" ibmdb.open(ibmdbconnMas

我很难集成bcrypt来确保登录系统的安全

我基本上得到了用户输入的用户名、密码,并尝试将其与数据库中的散列密码进行比较。这是我的

const inputUsername = req.body.inputUsername;
const inputPassword = req.body.inputPassword;


var userLogin = "select * from login where USERNAME = ?"
ibmdb.open(ibmdbconnMaster, function(err, conn) {
        if (err) return console.log(err);
        conn.query(userLogin, [inputUsername], function(err, rows) {
            if (err) {
                console.log(err)
            }

            if (rows.length > 0) {
            var pass = ""
            for (var i = 0; i < rows.length; i++) { 
                pass = rows[i]['PASSWORD'];
                console.log(pass)

                bcrypt.compare(inputPassword, hash, function(err, result) {
                    if (pass == result) {
                     console.log("this works")
                     userAuth = true;
                     res.redirect('/index')
                    }
                 })
            }

            console.log("does not work")
            } else {
                userAuth = "false";
                res.render('login.ejs')
                alert('Incorrect username or password. Please try again')
            }

            conn.close(function() {
                console.log('closed the function /login');
            });
        })
    })
const inputUsername=req.body.inputUsername;
const inputPassword=req.body.inputPassword;
var userLogin=“从用户名=?”的登录名中选择*”
open(ibmdbconnMaster,函数(err,conn){
if(err)返回console.log(err);
conn.query(userLogin,[inputUsername],函数(err,rows){
如果(错误){
console.log(错误)
}
如果(rows.length>0){
var pass=“”
对于(var i=0;i
现在发生的是我得到了错误
ReferenceError:hash未定义

我不知道如何解决这个问题。提前感谢

您在哪里定义了
散列
?我在你的代码里没看到

下面是我在bcrypt/node/express中使用的身份验证路由示例:

const Users=require(“../Users/Users model.js”);
路由器.post(“/寄存器)”,(请求,res)=>{
//从请求主体中提取用户的凭据。
const user=req.body;
//散列用户的密码,并将散列后的密码设置为
//请求中的用户密码。
const hash=bcrypt.hashSync(user.password,10);
user.password=hash;
用户。添加(用户)
.然后((新用户)=>{
const token=generateToken(newUser);
物件
.现状(201)
.json({created_user:newUser,token:token,user_id:newUser.id});
})
.catch((错误)=>{
res.status(500).json({
消息:“将用户添加到数据库时出错”,
犯错误
});
});
});
路由器.post(“/login)”,(请求、回复)=>{
const{username,password}=req.body;
Users.findBy({username})
.first()
。然后((用户)=>{
if(user&&bcrypt.compareSync(password,user.password)){
const token=generateToken(用户);
物件
.现状(200)
.json({
用户名:user.username,
first\u name:user.first\u name,
姓氏:user.last\u name,
电子邮件:user.email,
令牌:令牌,
user\u id:user.id,
});
}否则{
res.status(401).json({message:“无效凭证”});
}
})
.catch((错误)=>{
res.status(500).json(err);
});
});
函数generateToken(用户){
常数有效载荷={
userid:user.id,
用户名:user.username,
};
常量选项={
呼气蛋白:“1h”,
};
const token=jwt.sign(有效负载、secrets.jwtSecret、选项);
返回令牌;
}
module.exports=路由器;

在我的应用程序中未定义它。据我所知,它是内置的(所以我从代码示例中看到)。但是我可能错了。如果你有能力同步完成这项工作,你可以做类似于
const hash=bcrypt.hashSync(密码,10)代码,并将哈希存储在数据库中。然后在登录时,您可以使用
bcrypt.compareSync
,其中密码是用户在请求中输入的密码,散列是已存储在数据库中的密码。我更新了答案以包含示例代码。我感谢您的帮助。我用了一种有点不同的方式使用了你的例子。它帮助我意识到我错误地通过函数传递参数。谢谢你的帮助!