Html 在nodejs中使用bcrypt登录
我很难集成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
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
,其中密码是用户在请求中输入的密码,散列是已存储在数据库中的密码。我更新了答案以包含示例代码。我感谢您的帮助。我用了一种有点不同的方式使用了你的例子。它帮助我意识到我错误地通过函数传递参数。谢谢你的帮助!