【发布时间】:2026-01-19 07:55:02
【问题描述】:
所以开始我对 Node.js 的所有事物的冒险。我正在尝试学习的工具之一是 Sequelize。所以我将开始我想做的事情:
'use strict';
var crypto = require('crypto');
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
username: DataTypes.STRING,
first_name: DataTypes.STRING,
last_name: DataTypes.STRING,
salt: DataTypes.STRING,
hashed_pwd: DataTypes.STRING
}, {
classMethods: {
},
instanceMethods: {
createSalt: function() {
return crypto.randomBytes(128).toString('base64');
},
hashPassword: function(salt, pwd) {
var hmac = crypto.createHmac('sha1', salt);
return hmac.update(pwd).digest('hex');
},
authenticate: function(passwordToMatch) {
return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd;
}
}
});
return User;
};
我对何时使用 classMethods 和 instanceMethods 感到困惑。当我想到createSalt() 和hashPassword() 时,对我来说应该是类方法。它们是通用的,并且在大多数情况下与它们通常使用的特定实例没有任何关系。但是当我在classMethods 中有createSalt() 和hashPassword() 时,我无法从instanceMethods 调用它们。
我尝试了以下变体:
this.createSalt();
this.classMethods.createSalt();
createSalt();
像下面这样的东西不起作用,我可能只是不理解一些简单的东西。
authenticate: function(passwordToMatch) {
console.log(this.createSalt());
return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd;
}
非常感谢任何提示/提示/方向!
【问题讨论】:
标签: javascript node.js orm sequelize.js