【问题标题】:bcryptjs is hashing password but it is saved raw in databasebcryptjs 是散列密码,但它以原始方式保存在数据库中
【发布时间】:2019-12-27 02:58:28
【问题描述】:

我有注册/登录系统,对于散列,我使用了第三方库 bcryptjs,它可以工作(我的意思是它对 passwofrd 进行散列),但问题是这个密码是原始保存在数据库中的。这是我的猫鼬预保存钩子代码

AdminSchema.pre('save', async function(next){
var user = this;
if(!user.isModified('password')) return next();

bcrypt.genSalt(SALT_WORK_FACTORY, function(err, salt){
    if(err) return next(err);

    bcrypt.hash(user.password, salt,function(err,hash){
       if(err) return next(err);
       console.log(hash)
       user.password = hash;
       console.log(user.password)
       next();
    })
  })
})

这里是registration.js中的保存方法

 let admin;
  admin = new Admin();
  admin.username = username;
  admin.password = password;
  admin.save(function(err, user){
         if(err){
           console.log(err)
           return res.status(500).send({message:err.message})
         }
           console.log(user)
           const redirectTo = '/';
         return res.status(200).send({redirectTo})

        })
    }

当我在 pre hook 中记录 user.password 它显示我哈希 但是当我在save 登录用户时,它会向我显示原始文本。 什么是问题? 谢谢

【问题讨论】:

标签: node.js express mongoose hook bcrypt


【解决方案1】:

试试这对你有用。

const bcrypt = require("bcrypt");

let admin;
  admin = new Admin();
  admin.username = username;
  admin.password = bcrypt.hashSync(password, 10);
  admin.save(function(err, user){
         if(err){
           console.log(err)
           return res.status(500).send({message:err.message})
         }
           console.log(user)
           const redirectTo = '/';
         return res.status(200).send({redirectTo})

        })
    }

【讨论】:

  • 我无法使用 bcrypt 库
  • 我的意思是为什么我的代码没有将散列密码插入数据库
【解决方案2】:

尝试复制字符串而不是引用:

user.password = hash.slice();

PS:我不能评论,应该是评论,如果有错我会删除这个答案

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 2015-06-28
    • 2023-03-10
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多