2012-08-12 24 views
29

tôi đang làm quản lý phiên cookie với tốc với một cái gì đó như thế này:Bạn có thể sử dụng cookie với superagent như thế nào?

req.session.authentication = auth; 

Và tôi xác minh các url được chứng thực với một cái gì đó giống như

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

Bây giờ tôi đang xây dựng thử nghiệm cho các URL với mocha , superagentshould, tuy nhiên tôi không thể tìm cách để có được/đặt cookie với superagent. Tôi thậm chí đã cố gắng yêu cầu đăng nhập trước khi kiểm tra xác thực nhưng nó không hoạt động,

Tôi đã thử thêm yêu cầu đăng nhập vào tuyên bố trước cho bộ BDD mocha, tuy nhiên nó vẫn cho tôi biết rằng yêu cầu là trái phép, tôi đã kiểm tra xác thực thực hiện các yêu cầu từ trình duyệt, tuy nhiên nó không hoạt động từ bộ phần mềm bất kỳ ý tưởng tại sao?

Trả lời

28

Sử dụng superagent.agent() (thay vì đồng bằng cũ superagent) để yêu cầu có cookie liên tục. Xem 'Preserving cookies' in the superagent docs hoặc các ví dụ về mã: agency.js, controller.test.js.

+2

Lưu ý rằng 'superagent.agent()' có [nghiêm trọng, vấn đề không có giấy tờ trong cách nó xử lý cookie] (https://github.com/visionmedia/superagent/issues/352) cho hầu hết các định nghĩa yêu cầu - bất cứ điều gì phức tạp hơn một 'get (url, opts, cb)' đòi hỏi phải móc vào các phương thức riêng tư không có giấy tờ. –

+3

Trên thực tế, tài liệu cũng không đề cập đến cookie. Tôi đã thực sự bắt đầu thích thư viện này và có hy vọng cao vì tác giả, nhưng hóa ra lại vô dụng nếu bạn muốn sử dụng cookie phiên. –

+1

điều này không làm việc/nếu nó đã không thực sự là đủ ... ai đó có thể cung cấp một ví dụ về cách thức hoạt động .... – Zargold

13

Có vẻ như mã sau hoạt động tốt;

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

+0

người đàn ông tốt đẹp - thats một viên ngọc của một câu trả lời! – danday74

1

Kể từ khi bạn nói bạn cần cả hai có được thiết lập các cookie:

Nhận:

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

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

Set:

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

Nếu vấn đề là trong việc gửi các tập tin cookie cho các yêu cầu CORS sử dụng phương thức .withCredentials() described here

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