NodeBB(Redis)检索用户名和密码

时间:2015-03-30 07:03:39

标签: node.js redis node-redis nodebb

我想查询我的Redis服务器以获取用户名的匹配密码。我怎样才能做到这一点?我对Redis和Node的经验都很少,所以我找不到存储它的密钥。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

查看文件/src/routes/authentication.js。您有 Auth.login 功能,可获取用户名,密码作为参数。然后你在最初调用的用户对象上有 getUidByUserslug 函数,并从redis hash返回userID(_uid),称为'userslug:uid'(查看/ src / user .js文件db.getObjectField(' userslug:uid ',userslug,callback);函数)。下一步是从'user:'+ uid 哈希获取用户ID,存储在redis中。这是使用db.getObjectFields('user:'+ uid,['password','banned'],next)完成的;在authenticate.js文件中的函数。

以下是 Auth.login 功能:

Auth.login = function(req, username, password, next) {
    if (!username || !password) {
        return next(new Error('[[error:invalid-password]]'));
    }

    var userslug = utils.slugify(username);
    var uid;

    async.waterfall([
        function(next) {
            user.getUidByUserslug(userslug, next);
        },
        function(_uid, next) {
            if (!_uid) {
                return next(new Error('[[error:no-user]]'));
            }
            uid = _uid;
            user.auth.logAttempt(uid, req.ip, next);
        },
        function(next) {
            db.getObjectFields('user:' + uid, ['password', 'banned'], next);
        },
        function(userData, next) {
            if (!userData || !userData.password) {
                return next(new Error('[[error:invalid-user-data]]'));
            }
            if (userData.banned && parseInt(userData.banned, 10) === 1) {
                return next(new Error('[[error:user-banned]]'));
            }
            Password.compare(password, userData.password, next);
        },
        function(passwordMatch, next) {
            if (!passwordMatch) {
                return next(new Error('[[error:invalid-password]]'));
            }
            user.auth.clearLoginAttempts(uid);
            next(null, {uid: uid}, '[[success:authentication-successful]]');
        }
    ], next);
};