2016-08-09 37 views
5

Đoạn mã sau (sử dụng plugin PouchDB Authentication) không thành công vì nó kích hoạt trình duyệt gửi yêu cầu tiền tố CORS và CouchDB không hỗ trợ phương thức HTTP OPTIONS.Xác thực PouchDB kích hoạt yêu cầu tiền tố CORS

var db = new PouchDB("http://localhost:5984/mydb"); 
db.login('username', 'password'); 
// assume the database URL and login info are valid 

Đây là lỗi (trong Chrome). Lưu ý rằng vấn đề này cũng xảy ra trong Edge, nhưng không xuất hiện trong Firefox:

XMLHttpRequest không thể tải http://localhost:5984/_session. Đáp ứng cho preflight có mã trạng thái không hợp lệ HTTP 405

Và đây là các tiêu đề mà Chrome đang gửi cho yêu cầu (họ không khác biệt đáng kể trong Firefox):

POST /_session HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Content-Length: 25 
Accept: application/json 
Origin: http://localhost:8080 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Referer: http://localhost:8080/ 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8,es-419;q=0.6,es;q=0.4 

Tôi đã bật tính năng CORS qua tập lệnh Node add-cors-to-couchdb. Những điều tôi đã cố gắng:

  • thủ thêm OPTIONS như một phương pháp dưới [cors] trong local.ini tôi
  • Đi qua { ajax: { content_type: "text/plain" } } như là đối số thứ ba để login

Vì vậy, câu hỏi của tôi là:

  • Làm cách nào để ngăn chặn yêu cầu preflight được kích hoạt? Nhìn vào MDN documentation, nó không có vẻ cần thiết.
  • Nếu trước đó là không thể, làm thế nào tôi có thể thiết lập máy chủ CouchDB của tôi lên để đáp ứng với yêu cầu preflight?

Trả lời

2

Đập cùng một vấn đề này. Có vẻ như Chrome gần đây đã bắt đầu trở nên hung hăng hơn một chút về việc gửi tiền tố OPTIONS. Một tác phẩm phần xung quanh là để xác định nguồn gốc cụ thể trong tiêu đề CORS thay vì '*', nên

curl -X PUT $HOST/_config/cors/origins -d '"localhost:8080"' 

hoặc tương đương.

Tôi vẫn gặp lỗi preflight, nhưng bây giờ PouchDB đã xác thực thành công, vì vậy tôi chỉ có thể bỏ qua lỗi. Tôi nghĩ rằng sửa chữa là để có được CouchDB để đáp ứng với OPTIONS trên url _session.

Chỉnh sửa, thông tin thêm tại đây https://github.com/nolanlawson/pouchdb-authentication/issues/111

+0

Cảm ơn đề xuất. Thật không may, khi tôi cố gắng xác định nguồn gốc như bạn mô tả, kết quả là giống như trước (cùng một lỗi, không có xác thực). Cũng nhờ liên kết, thông tin rất hữu ích! – rvighne

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