我在學習Bookshelf.js。我使用bookshelf-modelbase來幫助模型,並且我使用password-hash-and-salt來幫助將密碼存儲在數據庫中。書架/書架模型庫問題添加函數和擴展訪問基類
此刻我想添加一個函數來設置用戶密碼,利用密碼哈希和鹽以生成存儲在數據庫中的password
列中輸入字符串。
我得聲明如下我的模型(db.js):
var knex = ...;
var bookshelf = require("bookshelf")(knex);
var ModelBase = require("bookshelf-modelbase")(bookshelf);
var Joi = require("joi");
var password = require("password-hash-and-salt");
module.exports.User = ModelBase.extend({
tableName: "users",
hasTimestamps: false,
validate: {
username: Joi.string().alphanum().min(3).max(64).required(),
},
setPassword: function (pw, callback) {
var user = this;
password(pw).hash(function (err, hash) {
if (err)
callback(err);
else {
console.log(user); // debugging
user.update({password:hash}).then(function (updated) {
return callback(null);
}).catch(function (err) {
return callback(err);
});
}
});
}
});
而且我attemptingn使用這樣的:
var db = require("./db.js");
db.User.findOne({username:"somebody"}).then(function (user) {
user.setPassword("password", function (err) {
if (err)
console.log(err);
else
console.log("value set", user.get("password"));
});
});
我在行上有問題:
TypeError: user.update is not a function
現在,bookshelf-modelbase爲模型添加了update()
函數,但我想我只是不確定如何使用它。
我原來嘗試使用this.update()
,但我發現,this
東西password(pw).hash
的回調內部的不同,這就是爲什麼我做了var user = this
第一。
當我在回調(這裏的「調試」的評論是)我確實看到了用戶模型錯誤的描述的錯誤消息日誌user
到控制檯了,有沒有update
功能:
constructor {
attributes:
{ username: 'somebody',
id: 1,
password: '' },
_previousAttributes:
{ username: 'somebody',
id: 1,
password: '' },
changed: {},
relations: {},
cid: 'c1',
validate:
{ isJoi: true,
_type: 'object',
_settings: null,
_valids: { _set: [] },
_invalids: { _set: [] },
_tests: [],
_refs: [],
_flags: {},
_description: null,
_unit: null,
_notes: [],
_tags: [],
_examples: [],
_meta: [],
_inner:
{ children: [Object],
renames: [],
dependencies: [],
patterns: [] } },
_events: { saving: [Function: validateSave] },
_eventsCount: 1,
_knex: null,
id: 1 }
我我不知道該怎麼做,我有點兒黑暗。
如何正確地將此setPassword
函數添加到我的User
模型中,調用它,並在其中進行更新?我真的找到的是this post,雖然標題很有希望,但並不是似乎適用。