【问题标题】:How to use bcrypt.compare in sails js schema?如何在sails js模式中使用bcrypt.compare?
【发布时间】:2021-04-12 11:44:07
【问题描述】:

我有一个这样的用户模型:

module.exports = {
  attributes: {
    email: {
      type: 'string',
      isEmail: true,
      unique: true,
      required: true
    },
    password: {
      type: 'string',
      required: true
    }
  },
  beforeCreate: (value, next) => {
    bcrypt.hash(value.password, 10, (err, hash) => {
      if (err){
        throw new Error(err);
      }
      value.password = hash;
      next();
    });
  },
};

现在当我想在登录期间匹配密码时,我如何解密密码,如果可能的话我更愿意在用户模型文件中执行它。

控制器/login.js

module.exports = {
  login: async (req, res) => {
    try{
      const user = await User.findOne({email: req.body.email});
      if (!user){
        throw new Error('Failed to find User');
      }

      // here I want to match the password by calling some compare 
      //function from userModel.js

      res.status(201).json({user: user});
    }catch(e){
      res.status(401).json({message: e.message});
    }
  },
};

【问题讨论】:

    标签: node.js mongodb sails.js bcrypt sails-mongo


    【解决方案1】:

    首先尝试通过用户找到具有给定用户名的用户

    const find = Users.find(user=>user.username===req.body.username)
    
    if(!find){
        res.send('User Not Found')
    }
    else{
        if( await bcrypt.compare(req.body.password,find.password)){
            //now your user has been found 
        }
        else{
            //Password is Wrong
        }
    }
    

    你必须使用 bcrypt.compare(a,b)

    a = 用户给定的密码

    b = 如果用户名存在,则为原始密码

    希望它能解决你的问题

    【讨论】:

    • 谢谢,这段代码工作得很好,但我想把比较函数写在我写模式的同一个文件中,而不是在控制器中。任何帮助。
    • 我不确定这个,但你可以创建带有 2 个参数的函数并将它们提供给你的函数内部的 bycript.compare,所以当你调用这个函数时,你必须看到相同的结果
    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多