2015-08-03 10 views
5

Mam wezwanie Uwierzytelnij wiadomości do serwera, który wygląda tak:Postman pre-prośba skrypt wykonywany po żądaniu

http://localhost/ServiceName/AuthenticateUser 

z ciałem wysłanego tak:

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

zawsze mam aby wykonać to połączenie uwierzytelniające dwa razy w Postmanie, aby mój globalny zmienny 'securityToken' został poprawnie wypełniony i użyty następnie do następnych wywołań do Uwierzytelniania, więc wygląda na to, że skrypt poprzedzający żądanie działa po OPAKOWANIU, czy jest to zestaw Globalnych vars? w skryptach poprzedzających żądanie nie są łatwo dostępne do bieżącego wniosku?

Po pierwszym uruchomieniu serwer zwraca błąd logowania i następnym razem, gdy loguje się poprawnie.

Co robię źle?

Oto sript pre-request:

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

Czy to możliwe, że na początkowym wywołaniu jest błąd gdzieś po drodze. Miałem podobny problem, gdy wydawało się, że skrypt pre-request nie działa i okazało się, że po stronie serwera moja usługa nie była poprawnie aktywowana. Czy próbowałeś narzędzia takiego jak Fiddler, aby sprawdzić odpowiedź na twoją początkową prośbę? – GargantuanTezMaximus

+0

@GartuanTezMaximus nie, śledząc kod serwera, wywołanie jest naprawdę wykonane z wcześniejszą wartością parametru i wykonuje polecenie OK. – zukanta

Odpowiedz

2

Właściwie dla mnie problem zniknął raz zastąpiły przywóz skrypt o teraz zintegrowanych bibliotek:

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

Bardzo mi to pomogło przy konfigurowaniu testów w aplikacji Postman. Coś takiego powinno być udokumentowane na stronie Postmana! Dziękuję Ci! – Codeversed

+0

@Codeversed cieszę się, że pomógł komuś innemu! – zukanta

3

mogę potwierdzić to zachowanie, potwierdzoną Skrzypek. Żądanie jest uruchamiane niezależnie od wykonania skryptu żądania wstępnego.

Podobno wynika to z obsługi przez Postmana wywołań ajaxowych w skryptach poprzedzających żądanie.

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

Zalecają tworząc dwa wnioski, początkowy POST, aby utworzyć token, a następnie łańcuchowym, że przy kolejnych żądaniach i ustawienie zmiennych środowiskowych podpisać te wnioski.

+0

Poinformuj nas, jak możemy złożyć wniosek w żądaniu. – testerjoe2

Powiązane problemy