请求后执行的邮递员预请求脚本
Postman pre-request script executing AFTER the request
我对服务器进行了身份验证 post 调用,如下所示:
http://localhost/ServiceName/AuthenticateUser
正文是这样发送的:
{
"userCredentials":"{{securityToken}}"
}
我总是必须在 Postman 中执行此 Authenticate 调用两次,以正确填充我的全局变量 'securityToken',然后用于下一次对 Authenticate 的调用,所以看起来预请求脚本实际上是 运行ning 在脚本之后,还是在预请求脚本中设置的全局变量对当前请求不可用?
我第一次 运行 这个服务器 returns 登录错误,下次它登录正常。
我做错了什么?
这是预请求脚本:
// 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);
});
我可以确认这种行为,由 fiddler 证明。无论是否执行预请求脚本,都会触发请求。
显然这是由于 Postman 支持 ajax 预请求脚本中的调用。
https://github.com/postmanlabs/postman-app-support/issues/644
他们建议创建两个请求,一个初始 POST 来创建令牌,然后将其与后续请求链接起来并设置环境变量来签署这些请求。
实际上,一旦我用现在集成的库替换脚本导入,问题就消失了:
//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);
我对服务器进行了身份验证 post 调用,如下所示:
http://localhost/ServiceName/AuthenticateUser
正文是这样发送的:
{
"userCredentials":"{{securityToken}}"
}
我总是必须在 Postman 中执行此 Authenticate 调用两次,以正确填充我的全局变量 'securityToken',然后用于下一次对 Authenticate 的调用,所以看起来预请求脚本实际上是 运行ning 在脚本之后,还是在预请求脚本中设置的全局变量对当前请求不可用?
我第一次 运行 这个服务器 returns 登录错误,下次它登录正常。
我做错了什么?
这是预请求脚本:
// 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);
});
我可以确认这种行为,由 fiddler 证明。无论是否执行预请求脚本,都会触发请求。
显然这是由于 Postman 支持 ajax 预请求脚本中的调用。
https://github.com/postmanlabs/postman-app-support/issues/644
他们建议创建两个请求,一个初始 POST 来创建令牌,然后将其与后续请求链接起来并设置环境变量来签署这些请求。
实际上,一旦我用现在集成的库替换脚本导入,问题就消失了:
//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);