2012-08-12 18 views
29

sto facendo gestione cookie di sessione con espresso con qualcosa di simile:Come si possono usare i cookie con superagente?

req.session.authentication = auth; 

E io verificare gli URL autenticati con qualcosa di simile

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

test Ora sto costruendo per gli URL con la moka , superagent e should, tuttavia non riesco a trovare un modo per ottenere/impostare il cookie con superagente. Ho anche provato a richiedere l'accesso prima del test autenticato ma non funziona,

Ho provato ad aggiungere la richiesta al login nella dichiarazione precedente per la suite BDD moka, tuttavia mi sta ancora dicendo che la richiesta è non autorizzato, ho testato l'autenticazione eseguendo le richieste dal browser, tuttavia non funziona dalla suite qualche idea per quale motivo?

risposta

28

Utilizzare superagent.agent() (anziché il semplice vecchio superagent) per fare in modo che le richieste abbiano cookie permanenti. Vedere 'Preserving cookies' in the superagent docs o gli esempi di codice: agency.js, controller.test.js.

+2

Si noti che 'superagent.agent()' ha [seri, problemi non documentati in modo in cui gestisce i cookie] (https://github.com/visionmedia/superagent/issues/352) per la maggior parte delle definizioni di richiesta - qualcosa di più complicato di un 'get (url, opts, cb)' richiede l'aggancio a metodi privati ​​non documentati. –

+3

In effetti la documentazione non menziona nemmeno i cookie. Stavo davvero cominciando ad apprezzare questa libreria e avevo grandi speranze a causa dell'autore, ma risulta essere inutile se si desidera utilizzare un cookie di sessione. –

+1

questo non ha funzionato/se lo ha fatto non è davvero sufficiente ... qualcuno può fornire un esempio di come funziona .... – Zargold

13

Sembra che il seguente codice funzioni correttamente;

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

+0

nice man - questo è un gioiello di una risposta! – danday74

1

Dal momento che lei ha citato è necessario ottenere sia e impostare il cookie:

Get:

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

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

Set:

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

Se il problema è l'invio di cookie per richieste CORS utilizzare il metodo .withCredentials() described here

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