首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >邮递员在请求后执行预请求脚本

邮递员在请求后执行预请求脚本
EN

Stack Overflow用户
提问于 2015-08-03 22:08:08
回答 2查看 5.9K关注 0票数 5

我有一个对服务器的身份验证post调用,如下所示:

代码语言:javascript
复制
http://localhost/ServiceName/AuthenticateUser

一具这样的身体:

代码语言:javascript
复制
{
    "userCredentials":"{{securityToken}}"
}

我总是必须在Postman中执行这个身份验证调用两次,才能正确地填充全局var 'securityToken‘,并在以后的调用中使用以进行身份验证,因此似乎请求前脚本实际上是在脚本之后运行,还是请求前脚本中设置的全局vars对当前请求不容易使用?

当我第一次运行这个程序时,服务器会返回一个登录错误,下一次它会很好地登录。

我做错了什么?

这是预先请求的sript:

代码语言:javascript
复制
// 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);    

});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-15 19:49:16

实际上,当我用现在集成的库替换脚本导入时,这个问题就消失了:

代码语言:javascript
复制
//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);    
票数 4
EN

Stack Overflow用户

发布于 2015-12-15 11:54:34

我可以证实这种行为,这是被小提琴手证实的。不管预请求脚本的执行情况如何,都会触发请求。

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31797589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档