0
};
var login = function(name, socket, passcode, callback) { 
    db.get(name + ':name', function(res) {
        db.get(name + ':pin', function(pin) {
            if (name === res) {
                if (passcode === pin) {
                    players[sockets.indexOf(socket)] = name;
                }
            }
        });
    });
};
var register = function(name, socket, passcode, callback) {
    if (name === null) {
        callback('Name null!');
        return;
    }
    if (name === '') {
        callback('Name empty!');
        return;
    }
    db.get(name + ':name', function(data) {
        if (data !== null) {
        callback('This name has been taken!');
    }
    else {
        db.set(name + ':name', name, function() {
            db.set(name + ':pin', passcode, function() {
                players[sockets.indexOf(socket)] = name;
                callback('Logged in as: ' + players[sockets.indexOf(socket)]);
            });
        });
    }
});
};

ログイン部分で任意のユーザーに任意のPINでログインでき、登録部分ではコールバックできないのはなぜですか?

それらは経由で呼び出されます

   login(args[1], socket, args[2], function(data) {
        callback(null, data)
    }

dbはredisクライアントです。

完全なコード:github.com/creativemud、ファイルserver.js

4

1 に答える 1

1

内部でコールバックを実行することはありませんlogin。終わったら電話する必要がありcallbackます。

また、エラー処理が不足しているようです。dbredis クライアントですか? その場合、すべてのコールバックの最初のパラメーターはエラーであり、これは node.js ランドでカスタムされています。私は次のようなことをします:

var login = function(name, socket, passcode, callback) { 
    db.get(name + ':name', function(err, res) {
        if(err) return callback(err);

        if(res !== name) return callback(new Error('invalid result'));

        db.get(name + ':pin', function(err, pin) {
            if(err) return callback(err);

            if(pin !== passcode) return callback(new Error('invalid passcode'));

            players[sockets.indexOf(socket)] = name;
            callback(null, name);
        });
    });
};

あまりきれいではないかもしれませんが、ドリフトをキャッチしていただければ幸いです。

編集:これらの関数を呼び出す方法は示していません。Socket.io は認証に対して非常に優れたサポートを提供しています。確認してみてください:認証とハンドシェイク

于 2012-08-08T09:59:24.440 に答える