簡體   English   中英

在socket.io中處理回調的正確方法

[英]the correct way of handling callback in socket.io

免責聲明:我對Node.js和Socket.io完全陌生,這更像是Javascript /通用編程問題,而不是特定於Node.js的問題,但是由於它是用Node.js編寫的,因此必須在此處發布。

我有這樣的功能

configs.socket.on('device_pair_authorization', function(device, callback) {
    var pair_token = device.pair_token;
    var server_signature = device.server_signature;
    if(pair_token && server_signature) {
        var decipher = crypto.createDecipher('aes-256-cbc', 'SOME_KEY');
        var decryptedSignature = decipher.update(server_signature, 'base64', 'utf8');
        decryptedSignature = decryptedSignature  + decipher.final('utf8');
        deSigJSON = JSON.parse(decryptedSignature);
        if(deSigJSON.user_id && deSigJSON.pair_token) {
            if(deSigJSON.pair_token === pair_token) {
                var server_handshake_token = deSigJSON.server_token;
                if(server_handshake_token) {
                    //VALIDATED
                    var one_time_access_token = crypto.createHash('sha512').update([Math.random(), server_handshake_token, new Date()].join()).digest('base64');
                    var expires = new Date().getTime() + 60;
                    callback({ 
                        is_authorized: true, 
                        one_time_access_token: one_time_access_token
                    });
                }
                callback({ 
                    is_authorized: false,
                    error: "Server Token Is Missing"
                });
            }
            callback({ 
                is_authorized: false,
                error: "Pair Token is Incorrect"
            });
        }
        callback({ 
            is_authorized: false,
            error: "Signature is corrupted"
        });
    }
    callback({ 
        is_authorized: false,
        error: "Pair_Token or Server_Signature is missing"
    });
});

整個想法是該功能是一個授權功能,並且為了防止欺詐,每個步驟都單獨進行檢查,如果在檢查過程中出現問題,則使用特定的錯誤消息執行回調,並且is_authorized = false。 如果一切順利,則使用is_authorized = true執行回調,並發送回令牌。

我的問題是,代碼對我來說看起來並不整潔,而且我敢肯定有一種方法可以修改此代碼,這樣就不會多次編寫回調,但我不知道為什么。

我想以更專業的方式重寫代碼。 有什么建議么?

您在這里不需要任何特殊的異步流幫助器,只需正確格式化代碼即可。 但是您可以看一下Q Promise 助手Async.jsPubSubJS

configs.socket.on('device_pair_authorization', function(device, callback) {
    var pair_token = device.pair_token;
    var server_signature = device.server_signature;
    var errorCallback = function(error) {
        callback({ 
            is_authorized: false,
            error: error
        });
    }

    if(!pair_token || !server_signature) {
        return errorCallback("Pair_Token or Server_Signature is missing")
    }

    var decipher = crypto.createDecipher('aes-256-cbc', 'SOME_KEY');
    var decryptedSignature = decipher.update(server_signature, 'base64', 'utf8');

    decryptedSignature = decryptedSignature  + decipher.final('utf8');
    deSigJSON = JSON.parse(decryptedSignature);

    if(!deSigJSON.user_id || !deSigJSON.pair_token) {
        return errorCallback("Signature is corrupted");
    }

    if(deSigJSON.pair_token !== pair_token) {
        return errorCallback("Pair Token is Incorrect");
    }

    if(!deSigJSON.server_token) {
        return errorCallback("Server Token Is Missing");
    }

    //VALIDATED
    var server_handshake_token = deSigJSON.server_token;
    var one_time_access_token = crypto.createHash('sha512').update([
        Math.random(), server_handshake_token, new Date()
        ].join()).digest('base64');

    var expires = new Date().getTime() + 60;

    callback({ 
        is_authorized: true, 
        one_time_access_token: one_time_access_token
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM