2012-08-12 739 views
29

我做餅乾的會話管理快遞的東西是這樣的:如何使用superagent使用cookies?

req.session.authentication = auth; 

我驗證與東西驗證URL像

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

與摩卡的URL現在我建立測試,superagentshould,但我似乎無法找到一種方法來獲取/設置超靈敏的cookie。我甚至試圖請求登錄之前進行身份驗證測試,但它不起作用,

我已經嘗試在摩卡BDD套件的前聲明中添加請求到登錄,但它仍然告訴我,請求是未經授權,我已經測試了從瀏覽器執行請求的身份驗證,但是它不適用於套件中的任何想法爲什麼?

回答

28

使用superagent.agent()(而不是普通的舊的superagent)使請求具有持久性cookie。請參閱'Preserving cookies' in the superagent docs或代碼示例:agency.jscontroller.test.js

+2

注意'superagent.agent()'有[嚴重,無證在如何處理Cookie問題(https://github.com/visionmedia/superagent/issues/352)對於大多數請求定義 - 任何比get(url,opts,cb)更復雜的東西都需要掛鉤到未公開的私有方法中。 – 2015-03-07 04:32:50

+3

事實上,文檔中也沒有提到Cookie。我真的開始喜歡這個圖書館,並且因爲作者而抱有很高的期望,但是如果你想使用會話cookie,結果是沒用的。 – 2015-09-03 18:51:39

+1

這並沒有工作/如果它做到這一點是不夠的...可以有人提供一個例子,說明如何工作.... – Zargold 2015-09-17 16:14:20

13

似乎下面的代碼工作正常;

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

+0

好男人 - 這是一個答案的寶石! – danday74 2017-03-03 00:47:53

1

既然你提到你需要都得到設置Cookie:

得到:

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

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

集:

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

如果問題是在發送的cookie對於CORS請求使用.withCredentials()方法 described here

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