I am trying to replace the User model's built-in Create method to add some extra custom logic and reformat the response data according to my need. Is there any way to do it?
Thanks in advance
Solved
You need to declare a new model. Then, afterwards, manually add a base property for it to inherit from the built-in User model.
/common/models/custom-user.json
{
"name": "customUser",
"base": "User",
"options": {
"idInjection": false,
"postgresql": {
"schema": "public",
"table": "user"
}
},
"dataSource": "mypostgresDS",
"properties": {
"id": {
"type": "number",
"postgresql": {
"columnName": "id",
"dataType": "integer"
}
}
...
...
}
}
Then you can override builtin routes on
/common/models/custom-user.js
module.exports = function (customUser) {
// avoid looking for properties that your new model doesn't have
var excludedProperties = [
'realm',
'emailVerified',
'verificationToken',
'credentials',
'challenges',
'lastUpdated',
'created'
];
// Remove the properties from base User model that doesn't have mapped columns
excludedProperties.forEach(function (p) {
delete customUser.definition.rawProperties[p];
delete customUser.definition.properties[p];
delete customUser.prototype[p];
});
customUser.prototype.createAccessToken = function (ttl, cb) {
var user = this;
if (ttl === undefined) ttl = 259200;
var timenow = new Date().toISOString();
console.log('ttl will be ', ttl, ' current time is ' + timenow);
user.accessTokens.create({
ttl: ttl
}, cb);
};
customUser.prototype.checkPassword = function (password, stored_hash) {
var user = this;
console.log('I will overwrite this check to always return true');
return true;
};
});
Comments
Post a Comment