2017-05-02 17 views
5

Tôi có ứng dụng phản hồi, sử dụng máy chủ phần còn lại của chương trình phụ trợ java ee, chạy trên một tên miền khác. Tôi đã kích hoạt CORS:Ứng dụng phản hồi bằng API có nguồn gốc khác (CORS)

Access-Control-Allow-Origin : http://localhost:3000 
Access-Control-Allow-Headers : origin, content-type, accept, authorization 
Access-Control-Allow-Credentials : true 
Access-Control-Allow-Methods : GET, POST, PUT, DELETE, OPTIONS, HEAD 
Access-Control-Max-Age : 1209600 

Tôi đang sử dụng phản ứng với lấy như thế này:

export function get(path, headers) { 
    return fetch(apiUrl + path, { 
     "metod" : "GET", 
     "headers" : headers, 
     "credentials" : "include" 
    }) 
} 

My phản ứng ứng dụng đang chạy trên http://localhost:3000. Khi tôi đăng nhập, máy chủ trả về Set-Cookie, nhưng cookie không được đưa vào bất kỳ yêu cầu nào khác đối với máy chủ, trừ khi tôi cố gắng đăng nhập lại. Sau đó, nó được bao gồm cho yêu cầu đăng nhập cụ thể đó.

Mọi đề xuất?

+0

Cookie có hợp lệ về thời hạn, miền, đường dẫn, v.v ... không? – robertklep

+0

Máy chủ đang trả lại cookie này 'Set-Cookie: kek = qel4h9n27ov9ratshdrnqhrrhr; Phiên bản = 1; Hủy bỏ, vì vậy tôi sẽ tin như vậy? – mrfonnes

+0

Thử đặt đường dẫn rõ ràng của '/' cho cookie (và cũng có thể, nếu bạn muốn đặt nhiều cookie, tôi tin bạn nên sử dụng nhiều tiêu đề 'Đặt-Cookie'). – robertklep

Trả lời

1

Vì vậy, tôi đã giải quyết vấn đề bằng cách sử dụng một luồng ngăn xếp khác và nhận xét của robertklep. Như đã nêu here: "Khi làm việc trên máy chủ cục bộ, tên miền cookie phải được bỏ qua hoàn toàn.". Tôi đã triển khai ý tưởng robertkleps, nhưng không đặt tên miền. Nó dẫn đến một Set-Cookie như thế này: Set-Cookie:kek=7fukucsuji1n1ddcntc0ri4vi; Version=1; Path=/; Max-Age=100000. Điều này hoạt động tốt.

0

Cài đặt ứng dụng này.

https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=es

Sau khi cài đặt, nhấp vào BrowserIcon và bật. Đó là tất cả. Bạn sẽ không nhận được nhiều lỗi hơn.

EDIT. Giải pháp cho sản xuất Nếu bạn muốn cấu hình nó từ máy chủ của bạn (hoặc đơn giản là không thêm một phần mở rộng trình duyệt, hãy thử này :)

  • Nếu bạn đang sử dụng Node.js làm như sau: Node.js tập tin máy chủ: response.writeHead(200, { 'Content-Type': contentType, 'Access-Control-Allow-Origin': '*' })

  • fetch('http://ajax.googleapis.com/ajax/services/feed/load?v=‌​1.0&num=8&q=http://r‌​ss.cnn.com/rss/editi‌​on_entertainment.rss‌​?output=rss', { method: 'get', mode: 'no-cors', }).then(() => { console.log('Works!'); });

  • giải pháp khác: Nếu bạn đang sử dụng PHP quá bạn có thể thêm: <?php header('Access-Control-Allow-Origin: *'); ?> vào PHP file của bạn. Như tôi thấy, nó không phải là trường hợp, vì vậy ... Trong máy chủ của bạn (ví dụ: Apache) thêm chỉ thị này: Header set Access-Control-Allow-Origin * trong Cài đặt (làm tùy chọn đầu tiên).

+0

Cảm ơn, nhưng tôi cần một giải pháp cho sản xuất. – mrfonnes

+0

Tôi đã chỉnh sửa câu trả lời của mình, với 3 giải pháp sở hữu. Hy vọng nó hoạt động tốt. – JuMoGar

Các vấn đề liên quan