当然这个问题已经被提出过了。但我的问题不同了。我正在尝试使用已经注册到mongodb中的用户名 - 幸运和密码 - mani 进行登录。但我的项目工作不正常。这里的 userroutes.js 如下所示。
foobar(b, 42)
这里我在控制台上获取用户名和密码。 现在它正在调用 userOperation.login 。以下是 usercrud.js ,其中实施了 userOperation.login 。 `
router.post('/login',(request,response)=>{
console.log(request.body.form_username);//lucky
console.log(request.body.form_password)//mani
userOperation.login(response,request);});
仍然正确打印了用户名和密码,但问题开始了 当我尝试在 User.find()中打印用户名和密码时,它会打印取消发现。的为什么?????? 这就是为什么我得到错误:需要数据和哈希参数 因为我试图在 bcrypt.compare()
中给出一个未定义的参数this is link of screenshot of the server console
我的第二个问题是为什么我在服务器启动后四次未定义? 这是userschema.js
var User = require("../../schema/user/userschema");
var bcrypt = require('bcrypt');
const userOperation={
login(res,request){
console.log(request.body.form_username);//lucky
console.log(request.body.form_password);//mani
User.findOne({ userid:request.body.form_username}, function (err, user) {
console.log(request.body.form_username);//undefined....why???
console.log(request.body.form_password);//undefined....why???
if (err) {
return done(err); }
if (!user) {
return done(null, false, { message: 'no user found' });
}
if(user){
bcrypt.compare(request.body.form_username, user.password, function(err, res) {
if (err)
throw err;
if(!res) {
console.log('Ooops!. Wrong Pass!');
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); // create the loginMessage and save it to session as flashdata
}
if(res){
// request.session.userid = request.body.form_username;
// request.sesssion.password = request.body.form_password;
response.send("Login Done");
}
});
}
});
},
}`
答案 0 :(得分:0)
如果您使用节点-v高于7.10.0,则使用
var bcrypt = require('bcryptjs');
如果可能的话,试试这个我做了同样的事情
try{
User.findOne({ email: req.body.email }, function (err, user) {
if (err){
return res.status(500).send('Error on the server.');
}
if (!user){
return res.status(404).send('No user found.');}
// check if the password is valid
var passwordIsValid = bcrypt.compareSync(req.body.password, user.password);
if (!passwordIsValid){
console.log(passwordIsValid);
logger.error(req.baseUrl + "status 401 auth faill: "+ req.body.email);
return res.status(401).send({ auth: false, token: null })
}
else{
// if user is found and password is valid
// create a token
var token = jwt.sign({ id: user._id }, config.secret, {
expiresIn: 86400 // expires in 24 hours
});
// return the information including token as JSON
logger.info("status 200 auth success: "+ req.body.email);
res.status(200).send({ auth: true, token: token });
}
});
}catch(ex){
logger.error('Login erro '+ ex)
console.log(ex);
throw ex;
也用于正确的身体解析器
var bodyParser = require('body-parser');
router.use(bodyParser.json());
让我知道是否需要更多帮助乐于助人:)
请忽略令牌部分。