邮差预请求脚本在请求后执行

时间:2015-08-03 22:08:09

标签: postman

我对服务器进行了Authenticate post调用,如下所示:

http://localhost/ServiceName/AuthenticateUser

以这样的身体发送:

{
    "userCredentials":"{{securityToken}}"
}

我总是要在Postman中执行两次Authenticate调用,以获取我的全局var' securityToken'正确填充并在此后用于下次调用Authenticate,因此看起来预请求脚本实际上是在脚本之后运行,还是在预请求脚本中设置的Global vars不能随时用于当前请求?

第一次运行此服务器时,服务器返回登录错误,下次登录时会很好。

我做错了什么?

此处是请求前请求:

// Import the CryptoJS library with jQuery
$.when(
    $.getScript( "http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js" ),
    $.getScript( "http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js" ),

    $.Deferred(function( deferred ){
        $( deferred.resolve );
    })
).done(function(){

    //The scripts are all loaded
    var api = {

        connection: {

            aesIV: 'blabla',
            aesKey: 'secretNoTellingYou'
        }
    }

    var aesIV = CryptoJS.enc.Hex.parse(api.connection.aesIV);
    var aesKey = CryptoJS.enc.Utf8.parse(api.connection.aesKey);

    if (!CryptoJS || !CryptoJS.AES || !CryptoJS.MD5) {
        alert('CryptoJS AES and MD5 Library Must Be Loaded');
    }

    var encrypt = function (text) {
        var encrypted = CryptoJS.AES.encrypt(text, aesKey, { iv: aesIV });
        return encrypted;
    };

    var encryptedUserCode = encrypt(globals["userCode"]).toString();
    var md5Password = CryptoJS.MD5(globals["password"]).toString().toUpperCase();
    var encryptedPassword = encrypt(md5Password.toString());
    var token = SomeFunctionToCreateToken(encryptedUserCode , encryptedPassword);

    postman.setGlobalVariable('securityToken', token);    

});

2 个答案:

答案 0 :(得分:3)

我可以证实这种行为,由提琴手证实。无论是否执行预请求脚本,都会触发请求。

显然这是因为Postman支持预请求脚本中的ajax调用。

https://github.com/postmanlabs/postman-app-support/issues/644

他们建议创建两个请求,一个初始POST来创建令牌,然后将其与后续请求链接,并设置环境变量以对这些请求进行签名。

答案 1 :(得分:2)

实际上对我来说,一旦用现在集成的库替换了脚本导入,问题就消失了:

//The scripts are all loaded
    var api = {

        connection: {

            aesIV: 'blabla',
            aesKey: 'secretNoTellingYou'
        }
    }

    var aesIV = CryptoJS.enc.Hex.parse(api.connection.aesIV);
    var aesKey = CryptoJS.enc.Utf8.parse(api.connection.aesKey);

    if (!CryptoJS || !CryptoJS.AES || !CryptoJS.MD5) {
        alert('CryptoJS AES and MD5 Library Must Be Loaded');
    }

    var encrypt = function (text) {
        var encrypted = CryptoJS.AES.encrypt(text, aesKey, { iv: aesIV });
        return encrypted;
    };

    var encryptedUserCode = encrypt(globals["userCode"]).toString();
    var md5Password = CryptoJS.MD5(globals["password"]).toString().toUpperCase();
    var encryptedPassword = encrypt(md5Password.toString());
    var token = encryptedUserCode + "|" + encryptedPassword;

    postman.setGlobalVariable('securityToken', token);