2016-08-09 3 views
5

다음 코드 (PouchDB Authentication 플러그인 사용)는 브라우저가 CORS 프리 플라이트 요청을 보내도록하고 CouchDB가 OPTIONS HTTP 메소드를 지원하지 않으므로 실패합니다.CORS 프리 플라이트 요청을 트리거하는 PouchDB 인증

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

다음은 오류입니다 (Chrome). 이 문제는 Edge에서도 발생하지만 Firefox에서는 발생하지 않습니다.

XMLHttpRequest는 http://localhost:5984/_session을로드 할 수 없습니다. 프리 플라이트에 대한 응답이 잘못 HTTP 상태 코드가 405

그리고 여기가 크롬 (그들은 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 

이미 활성화 한 CORS를 통해 add-cors-to-couchdb 노드 스크립트. 상황이 내가 시도 :

  • 수동 login 그래서

에 세 번째 인수로 { ajax: { content_type: "text/plain" } } 전달 내 local.ini

  • [cors] 아래의 방법으로 OPTIONS를 추가, 내 질문은 :

    • 프리 플라이트 요청이 실행되지 않게하려면 어떻게해야합니까? MDN documentation을 보면 필요하지 않은 것 같습니다.
    • 이전 버전을 사용할 수 없다면 프리 플라이트 요청에 응답하도록 내 CouchDB 서버를 어떻게 설정할 수 있습니까?
  • 답변

    2

    같은 문제가 발생합니다. Chrome이 OPTIONS 프리 플라이트를 보내는 것에 대해 조금 더 적극적으로 시작한 것 같습니다. 부분적인 해결책은, 그래서

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

    또는 유사한 특정 CORS 헤더의 기점 대신에 '*'를 지정하는 것이다.

    아직 프리 플라이트 오류가 발생하지만 이제는 PouchDB가 성공적으로 인증되므로 오류를 무시할 수 있습니다. CouchDB가 _session URL의 OPTIONS에 응답하도록하는 것이 해결책이라고 생각합니다.

    편집, 추가 정보를 제안 여기 https://github.com/nolanlawson/pouchdb-authentication/issues/111

    +0

    감사합니다. 불행히도, 설명대로 원점을 지정하려고 시도한 결과는 이전과 동일합니다 (동일한 오류, 인증 없음). 또한 링크에 대한 감사, 정보는 매우 도움이됩니다! – rvighne