User.find()相关的错误

时间:2018-03-10 10:47:54

标签: node.js mongodb express mongoose mongoose-schema

错误:需要数据和哈希参数

当然这个问题已经被提出过了。但我的问题不同了。我正在尝试使用已经注册到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"); } }); } }); }, }`

1 个答案:

答案 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());

让我知道是否需要更多帮助乐于助人:)

请忽略令牌部分。