2012-08-12 18 views
29

robię zarządzanie sesją ciasteczka z wyraźnej ze coś takiego:W jaki sposób można używać plików cookie z systemem Superagent?

req.session.authentication = auth; 

I zweryfikować uwierzytelnionego adresy URL z czymś

if(!req.session.authentication){res.send(401);} 

Teraz buduję testy dla adresów URL z mocha , superagent i should, ale nie mogę znaleźć sposobu na pobranie/ustawienie pliku cookie z poziomu superagenta. Próbowałem nawet zażądać logowania przed uwierzytelnionym testem, ale nie działa,

Próbowałem dodać prośbę do logowania w oświadczeniu before dla zestawu mocha BDD, jednak wciąż mówi mi, że żądanie jest nieautoryzowane, przetestowałem uwierzytelnianie wykonując żądania z przeglądarki, jednak nie działa z pakietu żadnych pomysłów, dlaczego?

Odpowiedz

28

Użyj superagent.agent() (zamiast zwykłego starego superagent), aby żądania miały trwałe pliki cookie. Zobacz 'Preserving cookies' in the superagent docs lub przykłady kodu: agency.js, controller.test.js.

+2

Zauważ, że 'superagent.agent()' [ma poważne, nielegalni zagadnienia jak obsługuje ciasteczka] (https://github.com/visionmedia/superagent/issues/352) dla większości definicji życzenie - cokolwiek bardziej skomplikowanego niż 'get (url, opts, cb)' wymaga zahaczenia o nieudokumentowane prywatne metody. –

+3

W rzeczywistości dokumentacja również nie wspomina o plikach cookie. Naprawdę zaczynałem lubić tę bibliotekę i miałem wielkie nadzieje z powodu autora, ale okazało się to bezużyteczne, jeśli chcesz użyć pliku cookie sesji. –

+1

to nie działa/jeśli to zrobiło, to nie jest wystarczające ... czy ktoś może podać przykład jak to działa ... – Zargold

13

Wygląda na to, że poniższy kod działa poprawnie;

req.set ("Cookie", "cookieName1 = cookieValue1; cookieName2 = cookieValue2");

+0

miły człowiek - to jest klejnot odpowiedzi! – danday74

1

Skoro wspomniałeś trzeba zarówno dostać i ustawić ciasteczko:

otrzymujemy:

const request = await Superagent.get('...') 

const cookie = request.header['set-cookie'] 

Set:

Superagent.post('...').set('Cookie', 'cookie_info') 
4

Jeśli problem jest w wysyłaniu ciasteczka dla żądań CORS użyj .withCredentials() metoda described here

request 
    .get('http://localhost:4001/') 
    .withCredentials() 
    .end(function(err, res) { }) 
Powiązane problemy