如何解决密码哈希bcrypt比较失败?
我正在遵循freeCodeCamp的Youtube教程,但是我的代码无法比较我的哈希密码和用户输入的密码。
Authencation.js代码
const { User } = require('../models')
const jwt = require('jsonwebtoken')
const config = require('../config/config')
function jwtSignUser (user) {
const ONE_WEEK = 60 * 60 * 24 * 7
return jwt.sign(user,config.authentication.jwtSecret,{
expiresIn: ONE_WEEK
})
}
module.exports = {
async register (req,res) {
try {
const user = await User.create(req.body)
const userjson = user.toJSON()
res.send({
user: userjson,token: jwtSignUser(userjson)
})
} catch (err) {
console.log(err)
res.status(400).send({
error: 'This email account is already in use.'
})
}
},async login (req,res) {
try {
const { email,password } = req.body
const user = await User.findOne({
where: {
email: email
}
})
console.log(user)
if (!user) {
return res.status(403).send({
error: 'The email information was incorrect'
})
}
const isPasswordValid = await user.comparePassword(password)
console.log(isPasswordValid)
if (!isPasswordValid) {
return res.status(403).send({
error: 'The password information was incorrect'
})
}
const userjson = user.toJSON()
res.send({
user: userjson,token: jwtSignUser(userjson)
})
} catch (err) {
console.log(err)
res.status(500).send({
error: 'An error has occured trying to log in'
})
}
}
}
在这里user.comparePassword(password)是需要将密码与存储的密码和用户输入的密码进行比较的功能
哈希和存储是通过User.js完成的
const Promise = require('bluebird')
const bcrypt = Promise.promisifyAll(require('bcrypt'))
function hashPassword (user,options) {
const SALT_FACTOR = 8
if (!user.changed('password')) {
return
}
return bcrypt
.genSalt(SALT_FACTOR)
.then(salt => bcrypt.hash(user.password,salt,null))
.then(hash => {
user.setDataValue('password',hash)
})
}
module.exports = (sequelize,DataTypes) => {
const User = sequelize.define('User',{
email: {
type: DataTypes.STRING,unique: true
},password: DataTypes.STRING
},{
hooks: {
beforeCreate: hashPassword,beforeUpdate: hashPassword,beforeSave: hashPassword
}
})
User.prototype.comparePassword = function (password) {
return bcrypt.compare(password,this.password)
}
return User
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。