• Global Moderator Plugin & Theme Dev

    @julian I think his problem is actually that he's not importing the user module from NodeBB:

    var user = require.main.require('./src/user');
    
  • GNU/Linux Admin

    Ah yes, looks like you're right.


  • @PitaJ

    i'm importing it here:
    var user = module.parent.require('../user');

    It's wrong ?

    I've seen that all functions in nodebb/src/user/index.js are working , getUserDataByField is in nodebb/src/controllers/user.js and is not working

  • Global Moderator Plugin & Theme Dev

    @Simos please don't use module.parent.require, use require.main.require instead, like I said before.

    Yes, you have it in there once, but you should be importing it at a higher level. The way it is, it's only available within that one function, but you use it in a different hook entirely.


  • @PitaJ
    thanks for the explanations, I've started from the original node-plugin-login-mysite, and I know I'm doing some stuff looking at the original code


  • @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

  • Global Moderator Plugin & Theme Dev

    @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 😕


  • I need pheraps to import some other module ?

  • GNU/Linux Admin

    Hi there, I do not see where you are trying to call db.sortedSetScore... though keep in mind it believe it is also getSortedSetScore 😄


  • @julian if you take a look to plugin.getUserDataByField function i call plugin.getUidByAUid wich call db.sortedSetScore.


  • @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 😕


  • I'm still blocked here 😞 any suggestion ?

  • NodeBB Admin

    What is the type of auid:uid ? Is it a sorted set or hash? Run this in mongo shell db.objects.find({_key: "auid:uid"});


  • @baris i'm using Redis not mongoDB

    127.0.0.1:6379> HGET user:1 auid
    "3074"

  • Global Moderator Plugin & Theme Dev

    @Simos the equivalent code would be

    ZSCORE auid:uid 1
    

  • @PitaJ @baris

    127.0.0.1:6379> HGET user:1 auid
    "3074"
    127.0.0.1:6379> ZSCORE auid:uid 1
    (nil)
    127.0.0.1:6379>

    it say nil


Suggested Topics

| | |

© 2014 – 2022 NodeBB, Inc. — Made in Canada.