2014-05-06 17 views
6

Obecnie próbuję przedstawić istniejący interfejs API z apiary.io. System implementuje uwierzytelnianie poprzez żądanie logowania, które zwraca plik cookie http zawierający identyfikator sesji.Jak przedstawiać sesje w formacie api blueprint?

O ile mi wiadomo, standard jest taki, że przeglądarka wysyła wszystkie pliki cookie http, które wcześniej otrzymywał od gospodarza z powrotem do niego podczas składania kolejnego żądania.

Wygląda na to, że Dredd nie robi tego podczas uruchamiania testu wygenerowanego przez mój plik z projektem. Z tego powodu wszelkie żądania, które wymagają zalogowania się użytkownika, nie działają poprawnie dla testu.

Czy istnieje możliwość oznaczenia żądania jako "wymagającego przed uruchomieniem tego żądania", aby zmusić Dredd do zarządzania tymi plikami cookie?

BTW, usługa REST jest zaimplementowana w Sails.js, ramach mvc dla node.js.

Odpowiedz

0

Urządzenie Dredd jest przeznaczone do pracy z konfiguracją środowiska testowego, np. w narzędziu CI z urządzeniami testowymi. Nie powinien być uruchamiany w środowisku produkcyjnym.

Po tym czasie może być konieczne wykonanie czynności konfiguracyjnych lub odłożenia podczas testowania punktu końcowego. Planuje się ostatecznie zaoferować test scenarios.

Jeśli potrzebujesz funkcji konfiguracji/rozpadu, możesz użyć "haków" Dredda, jak omówiono here.

1

To jest stary, ale ja po prostu wpadł na ten sam problem i docs Dredd są zupełnie nieaktualne (nie jest to ironiczne ?!), więc od czasu, kiedy zorientowaliśmy się to może komuś pomóc :)

Możesz odczytywać i nadpisywać odpowiedzi oraz żądać treści i nagłówków przy użyciu hooks (jest to najbardziej aktualna strona, którą znalazłem na ten temat, ale nadal ma problemy i literówki). Jednym z zastrzeżeń jest to, że dredd nie ma pomocników na pliki cookie, więc musisz sam parsować i budować nagłówki plików cookie.

W moim przypadku sessionId powraca w treści json, a także jako plik cookie: Przetworzyłem treść, ponieważ jest to łatwiejsze, ale w razie potrzeby można bardzo dobrze pobrać sesję z pliku cookie odpowiedzi. Oto z grubsza haki pisałem, aby praca auth:

hooks = require('hooks'); 
stash = {} 

// hook to retrieve session on a login 
hooks.after('Auth > /remoteauth/userpass > POST', function(transaction){ 
    stash['token'] = JSON.parse(transaction.real.body)['sessionId']; 
}); 

// hook to set the session cookie in all following requests 
hooks.beforeEach(function(transaction){ 
    if(stash['token'] != undefined){ 
    transaction.request['headers']['Cookie'] = "id=" + stash['token'] 
    }; 
}); 

The docs wyjaśniają jak skonfigurować haczyki, chociaż jedna rzecz, która mnie jest to, że zadziałał komenda dredd --names nie działa, jeśli masz plik w dredd.yml ten sam katalog (wydaje się, że obecność tego pliku powoduje, że dredd ignoruje wszystkie argumenty wiersza poleceń).