在做注册的时候使用bcrypt加密,将加密后的密码保存到数据库中,然后登录,通过bcrypt.compareSync将用户输入的密码与数据库的密码进行比较,结果返回false之前的代码为注册:User.init(userpwd:{type:Sequelize.STRING,set(val){constsalt=bcrypt.genSaltSync(10)constpsw=bcrypt.hashSync(val,salt)this.setDataValue('userpwd',psw)constcorrect=bcrypt.compareSync(val,psw)console.log(val,psw,correct,'correct000')},},},{sequelize,tableName:'users',})日志:const{user_name,userpwd}=ctx.请求。bodyconsthaveUser=awaitUser.findOne({where:{user_name,},})if(haveUser){constisPass=bcrypt.compareSync(userpwd,haveUser.userpwd)console.log(isPass)//这里总是假的if(isPass){//获取令牌lettoken=getToken(haveUser.uid,havePhone.user_name)ctx.body={code:10000,data:{token,},}}else{thrownewPasswordError()}}总是返回假的,折腾了半天,差点怀疑人生。后来觉得加密和解密不在同一个文件,所以改了代码classUserextendsModel{staticasynccheckPassword(user_name,userpwd){constuser=awaitthis.findOne({where:{user_name,},})if(!user){thrownewNotExsitError()}//验证密码是否一致constcorrect=bcrypt.compareSync(userpwd,user.userpwd)console.log(userpwd,user.userpwd,correct,'correct')if(!correct){thrownewPasswordError()}returnuser}}User.init(type:Sequelize.STRING,set(val){constsalt=bcrypt.genSaltSync(10)constpsw=bcrypt.hashSync(val,salt)this.setDataValue('userpwd',psw)constcorrect=bcrypt.compareSync(val,psw)console.log(val,psw,correct,'correct000')},},},{sequelize,tableName:'users',})然后登录时const{user_name,userpwd}=ctx.request.bodyconsthaveUser=awaitUser.checkPassword(user_name,userpwd)怀着激动的心情,我以为它会给我返回true,结果checkPassword方法中的console.log打出来的时候还是false。百度了半天也没找到有用的。原始文本不再加密。刚开始对很多node项目不是很熟悉。后来想着注册的时候把密码和加密后的打印出来,然后登录的时候把两者打印出来对比一下,果然发现注册和登录的时候加密的字符串不一样,不过前半部分是相同,所以我就想是不是在数据盘点的时候被拦截了。看了下密码长度是32,太短了,改成128就可以了。也可以有两个文件
