我遇到了bcrypt-nodejs'比较功能。 compare函数返回false值,即使密码是正确的。 我已尽力而为,而且我不知道我的代码有什么问题。
我的文件夹结构
created() {
Validator.extend('fieldName', {
getMessage(field, val) {
return `Enter valid ${val}`
},
validate(value, field) {
if (field == 'firstName') { return /^[a-zA-Z]*$/.test(value) }
else if (field == 'lastName') { return /^[a-z]*$/.test(value) }
// and so on
}
})
},
methods: {
validations(field) {
return { required: true, fieldName: field }
}
}
我认为问题在于模型文件夹中的 User.js 。
user.js的
import tensorflow as tf
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,3],stddev=1,seed=1))
x = tf.constant([0.7,0.9])
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
sess = tf.Session()
sess.run(w1.initializer)
sess.run(w2.initializer)
print(sess.run(y))
sess.close()
AuthenticationController.js
src
-config
-config.js
-controller
-AuthenticationController.js
-models
-index.js
-User.js
-policies
-AuthenticationControllerPolicy.js
app.js
routes.js
package.json
route.js
const Promise = require('bluebird')
const bcrypt = Promise.promisifyAll(require('bcrypt-nodejs'))
function hashPassword (user, options) {
const SALT_FACTOR = 8
if (!user.changed('password')) {
return
}
return bcrypt
.genSaltAsync(SALT_FACTOR)
.then(salt => bcrypt.hashAsync(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.compareAsync(password, this.password)
}
User.associate = function (models) {
}
return User
}
如果需要,您还可以查看回购。 GitHubRepo
答案 0 :(得分:2)
bcrypt-nodejs
的使用似乎是正确的。我会验证进入的密码和数据库中的哈希都是你期望的(特别是在comparePassword
函数内),以排除它是否是数据问题。