我正在尝试在节点JS中构建日志记录应用程序。在这里密码验证应用程序无法正常工作。当我输入用户名和密码时,它会发生错误并停止服务器。
this is the error.
以下是身份验证部分的代码
passport.use(new LocalStrategy(
function(username, password, done) {
User.getUserByUsername(username, function(err, user){
if(err) throw err;
if (!user) {
return done(null, false, {message: 'Unknown user'});
}
User.comparePassword(password, user.password, function(err, isMatch){
if(err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, {message: 'Invalid password'});
}
});
});
}));
此代码适用于未知用户。 但它不适用于比较用户名和密码。我在这里看不到任何错误。我想要一个帮助来解决这个问题。
答案 0 :(得分:0)
我在这里发现了问题。这不是关于代码的事情。
事情是我注册了两个用户名相同且密码不同的用户。然后,当我尝试使用用户名和一个密码登录时,发生此错误并停止服务器。
因为找到用户输入的用户名的密码有尴尬的情况。因为有两个密码具有相同的用户名。
答案 1 :(得分:0)
就我而言,我正在使用社交登录/注册。当用户使用社交登录选项注册时,存储的密码值为“NULL”。
所以我刚加了这个小支票:
comparePassword: function(password, user){
if (!user.password)
return false;
return bcrypt.compareSync(password, user.password);
}
答案 2 :(得分:0)
在
“模型/user.js”
在comparePassword内部
module.exports.comparePassword = (candidatePassword, hash, callback) => {...)
添加此代码:
bcrypt.hash(candidatePassword, 10, (err, hash) => {
if(err) {
throw err;
}
bcrypt.compare(candidatePassword, hash, (err, isMatch) => {
if(err) {
throw err;
}
callback(null, isMatch);
});
});
答案 3 :(得分:0)
在这里,我们从登录页面中获取用户名和密码,并且 通过数据库中的用户名找到我们的用户,然后 将其加密密码与用户输入的密码进行匹配
passport.use(new LocalStrategy(
(username,password,done)=> {
db.users.findOne({username: username},(err, user)=> {
if(err) return done(err);
if(!user) {
return done(null,false,{message: 'Incorrect Username'});
}
bcrypt.compare(password, user.password,(err,isMatch)=> {
if(err) return done(err);
if(isMatch) {
return done(null, user);
} else {
return done(null, false,{message: 'Incorrect Password'});
}
});
});
}
));
答案 4 :(得分:0)
您还需要对盐和密码分配进行等待。
喜欢这个
const salt = await bcrypt.genSaltSync(10);
const password = await req.body.password;
答案 5 :(得分:0)
以宇宙程序员的名义
就我而言,我忘记选择密码 因为在数据库中密码是 ((select: false))
此应用代码
const user = await User.findOne({email}).select("+password")
我忘了将 ((.select("+password"))) 附加到 findOne
我收到了这个错误; 错误:非法参数:字符串,未定义
和这个数据库代码
const User = new mongoose.Schema({
username:{
type:String,
required: [true,"نام کاربری ضروری است"]
},
email:{
type:String,
required: [true,"رایانامه ضروری است"],
unique: true,
match:[
/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{1,3})$/,
"لطفا یک رایانامه صحیح وارد کنید"
]
},
password:{
type:String,
required:[true,"رمز ضروری است"],
minlegth: 5,
select: false
}
})