2015-08-03 6 views
5

ich ein Authentifizieren Post Aufruf an den Server haben, die wie folgt aussieht:Postman Vorbitte Skript nach dem Antrag der Ausführung

http://localhost/ServiceName/AuthenticateUser 

mit einem Körper so geschickt:

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

ich immer Um diesen Authenticate-Aufruf in Postman zweimal auszuführen, wird meine globale Variable 'securityToken' richtig ausgefüllt und danach für die nächsten Aufrufe von Authenticate verwendet. Es scheint also, dass das Vorab-Anforderungsskript tatsächlich NACH dem Skript ausgeführt wird oder Global Vars gesetzt ist In Voranfragen Skripts sind nicht ohne weiteres verfügbar zur aktuellen Anfrage?

Das erste Mal, wenn ich dies ausführe, gibt der Server einen Login-Fehler zurück und beim nächsten Mal meldet es sich gut an.

Was mache ich falsch?

Hier ist die Vorbitte sript:

// 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);  

}); 
+0

Könnte es möglich sein, dass auf dem ersten Aufruf ein Fehler irgendwo auf dem Weg ist. Ich hatte ein ähnliches Problem, bei dem es so aussah, als würde das Vorab-Anforderungsskript nicht ausgeführt und es stellte sich heraus, dass mein Dienst auf der Serverseite nicht korrekt aktivierte. Haben Sie ein Tool wie Fiddler ausprobiert, um die Antwort auf Ihre erste Anfrage zu überprüfen? – GargantuanTezMaximus

+0

@GartuanTezMaximus nein, der Server-Code verfolgt, der Aufruf ist wirklich mit dem vorherigen Parameterwert gemacht und schließt OK ab. – zukanta

Antwort

2

für mich eigentlich das Problem einmal verschwunden ersetzt ich das Drehbuch Importe mit den jetzt integrierten Bibliotheken:

//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);  
+0

Das hat mir beim Testen in Postman sehr geholfen. So etwas sollte auf der Postman-Website dokumentiert werden! Vielen Dank! – Codeversed

+0

@Codeverseed froh, dass dies jemand anderem geholfen hat! – zukanta

3

ich dieses Verhalten bestätigen kann, durch Fiedler unter Beweis gestellt. Die Anforderung wird ausgelöst, unabhängig von der Ausführung des Vorab-Anforderungsskripts.

Offenbar ist dies auf Postmans Unterstützung von Ajax-Aufrufen in Pre-Request-Skripten zurückzuführen.

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

Sie empfehlen, zwei Anforderungen zu schaffen, ein erstes POST das Token zu erstellen, und dann, dass mit nachfolgenden Anforderungen Verkettungs und Umgebungsvariablen, um diese Anfragen zu unterzeichnen.

+0

Bitte teilen Sie uns mit, wie wir innerhalb einer Anfrage eine Anfrage stellen können. – testerjoe2

Verwandte Themen