Forcing UID value
-
@PitaJ said in Forcing UID value:
var user = require.main.require('./src/user');
i've add this, but i've the same error :
2018-11-27T20:31:09.199Z [11960] - error: uncaughtException: user.getUserDataByField is not a function
TypeError: user.getUserDataByField is not a function
at /home/nodebb/NodeBB/node_modules/nodebb-plugin-login-anope/library.js:73:18 -
@Simos ah looks like it's just
getUserField
-
Yes! I'm going forward !
Now i can get getUserDataByField function work !
I needed :
var user = require.main.require('./src/user');
var userController = require.main.require('./src/controllers').user;and call userController.getUserDataByField and not user.getUserDataByField
The bad notice is that it work if i use uid :
console.log(userObj.uid); userController.getUserDataByField('1', 'uid', '13', function(err, userData) { console.log(userData);
and it return :
46122 2018-11-27T20:45:39.706Z [12659] - verbose: [plugins/fireHook] {"meta":"filter:user.whitelistFields"} 2018-11-27T20:45:39.712Z [12659] - verbose: [plugins/fireHook] {"meta":"filter:users.get"} 2018-11-27T20:45:39.712Z [12659] - verbose: [plugins/fireHook] {"meta":"filter:user.getSettings"} 2018-11-27T20:45:39.713Z [12659] - verbose: [plugins/fireHook] {"meta":"filter:user.notificationTypes"} { uid: 13, username: 'antani', userslug: 'antani', email: undefined, 'email:confirmed': 0, joindate: 1542932961765, lastonline: 1543323019093, picture: '', fullname: undefined, location: '', birthday: '', website: '', aboutme: null, signature: '', uploadedpicture: '', profileviews: 0, reputation: 0, postcount: 0, topiccount: 0, lastposttime: 0, banned: 0, 'banned:expire': 0, status: 'offline', flags: null, followerCount: 0, followingCount: 0, 'cover:url': null, 'cover:position': null, groupTitle: null, auid: '46122', groupTitleArray: [], 'icon:text': 'A', 'icon:bgColor': '#2196f3', joindateISO: '2018-11-23T00:29:21.765Z', lastonlineISO: '2018-11-27T12:50:19.093Z', banned_until: 0, banned_until_readable: 'Not Banned' }
but not if i use :
console.log(userObj.uid); userController.getUserDataByField('1', 'auid', userObj.uid, function(err, userData) { console.log(userData);
it return null
46122 2018-11-27T20:41:57.152Z [12474] - verbose: [plugins/fireHook] {"meta":"filter:user.whitelistFields"} 2018-11-27T20:41:57.158Z [12474] - verbose: [plugins/fireHook] {"meta":"filter:users.get"} 2018-11-27T20:41:57.159Z [12474] - verbose: [plugins/fireHook] {"meta":"filter:user.getSettings"} 2018-11-27T20:41:57.160Z [12474] - verbose: [plugins/fireHook] {"meta":"filter:user.notificationTypes"} { uid: 0, username: '[[global:former_user]]', userslug: '', email: undefined, 'email:confirmed': 0, joindate: 0, lastonline: 0, picture: '', fullname: undefined, location: null, birthday: null, website: null, aboutme: null, signature: null, uploadedpicture: null, profileviews: 0, reputation: 0, postcount: 0, topiccount: 0, lastposttime: 0, banned: 0, 'banned:expire': 0, status: null, flags: null, followerCount: 0, followingCount: 0, 'cover:url': null, 'cover:position': null, groupTitle: '', auid: null, oldUid: 46122, 'icon:text': '?', 'icon:bgColor': '#aaa', groupTitleArray: [], joindateISO: '', lastonlineISO: '', banned_until: 0, banned_until_readable: 'Not Banned' }
what's wrong now ? the field auid exist and is filled with the right value
-
I've placed a console.log in my filter , it look it never run,
plugin.getUserDataByField = function (callerUid, field, fieldValue, callback) { console.log('filter running') if (field === 'auid') { user.getUidByAUid(fieldValue, next); } };
It' wrong the hook ? or is not possible ? i've not found it in hook docs
{ "hook": "filter:userController.getUserDataByField", "method": "getUserDataByField" },
-
I've just try to put this function in the plugin and call that directly without hooks,
plugin.getUidByAUid = function(auid, callback) { if (!auid) { return callback(null, 0); } console.log('auid param log:' + auid); db.sortedSetScore('auid:uid', auid, callback); }; plugin.getUserDataByField = function (callerUid, field, fieldValue, callback) { async.waterfall([ function (next) { if (field === 'uid') { next(null, fieldValue); } else if (field === 'auid') { plugin.getUidByAUid(fieldValue, next); } else if (field === 'username') { user.getUidByUsername(fieldValue, next); } else if (field === 'email') { user.getUidByEmail(fieldValue, next); } else { next(null, null); } }, function (uid, next) { if (!uid) { return next(null, null); } userController.getUserDataByUID(callerUid, uid, next); }, ], callback); };
than i've try each field using plugin.getUserDataByField and not userController.getUserDataByField (hook doesn't exist so was ignored) :
function (userObj, callback) { //user.getUidByEmail(String(userObj.email), callback) //user.getUserDataByUID('1','4', callback); //plugin.getUidByAUid(String(userObj.uid), callback); console.log(userObj.uid); plugin.getUserDataByField('1', 'auid', userObj.uid, function(err, userData) { console.log(userData.auid); //return callback(userData.auid, null); });
Using all field work except that auid , db.sortedSetScore('auid:uid', auid, callback) return always null
-
@julian said in Forcing UID value:
getSortedSetScore
getSortedSetScore doesn't exist it's sortedSetScore
https://github.com/NodeBB/NodeBB/blob/master/src/user/index.js#L129 -
plugin.getUidByAUid = function(auid, callback) { if (!auid) { return callback(null, 0); } db.sortedSetScore('auid:uid', auid, callback); };
return always null , so i've checked if the function was working and i've try to change db.sortedSetScore('auid:uid', auid, callback) to db.sortedSetScore('email:uid', '[email protected]' , callback) and it work .
At this point i've also checked using redis-cli for 'auid' field, it exist and has the right value.
I really don't understand what's wrong, it look db.sortedSetScore can't find 'auid' for some reason
-
@Simos the equivalent code would be
ZSCORE auid:uid 1
-
@baris so why i can get it in the hash ? auid exist ...
127.0.0.1:6379> HGETALL user:1
- "username"
- "Simos"
- "userslug"
- "simos"
- "email"
- "[email protected]"
- "joindate"
- "1542893552374"
- "lastonline"
- "1543850453258"
- "picture"
- ""
- "fullname"
- ""
- "location"
- ""
- "birthday"
- ""
- "website"
- ""
- "signature"
- ""
- "uploadedpicture"
- ""
- "profileviews"
- "2"
- "reputation"
- "0"
- "postcount"
- "1"
- "topiccount"
- "1"
- "lastposttime"
- "1542893552974"
- "banned"
- "0"
- "status"
- "online"
- "gdpr_consent"
- "0"
- "acceptTos"
- "0"
- "uid"
- "1"
- "password"
- "XXXXXXXXXXXXXXXXXXXXXXXXXX"
- "passwordExpiry"
- "0"
- "groupTitle"
- "["administrators"]"
- "auid"
- "3074"
-
@Simos said in Forcing UID value:
"auid"
"3074"It exists as part of the user hash, but if you don't save it into
auid:uid
thensortedSetScore
will always return null. You need to set it intoauid:uid
as well withdb.sortedSetAdd('auid:uid', uid, auid, callback);