2016-08-09 2 views
5

Der folgende Code (mit dem PouchDB Authentication-Plugin) schlägt fehl, weil der Browser eine CORS-Preflight-Anforderung sendet und CouchDB die HTTP-Methode OPTIONS nicht unterstützt.PouchDB-Authentifizierung löst CORS-Preflight-Anfrage aus

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

Hier ist der Fehler (in Chrome). Beachten Sie, dass dieses Problem auch in Edge, aber nicht in Firefox auftritt:

XMLHttpRequest kann http://localhost:5984/_session nicht laden. Antwort für Preflight hat ungültige HTTP-Statuscode 405

Und hier sind die Header, die Chrome ist für die Anfrage zu senden (sie sind nicht signifikant verschieden in 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 

Ich habe bereits CORS aktiviert über das add-cors-to-couchdb Knoten-Skript. Dinge, die ich habe versucht:

  • manuell OPTIONS als Methode unter [cors] in meinem local.ini
  • Passing { ajax: { content_type: "text/plain" } } als drittes Argument an login

So hinzufügen, meine Frage ist:

  • Wie kann ich verhindern, dass die Preflight-Anfrage ausgelöst wird? Mit Blick auf die MDN documentation scheint es nicht notwendig.
  • Wenn das vorherige nicht möglich ist, wie kann ich meinen CouchDB Server so einstellen, dass er auf Preflight-Anfragen reagiert?

Antwort

2

Schlagen Sie das gleiche Problem. Scheint, dass Chrome kürzlich etwas aggressiver mit dem Senden des OPTIONS Preflight ist. Eine Teil Arbeit war um einen bestimmten Ursprung im CORS-Header angeben, statt ‚*‘, so

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

oder ähnliches.

Ich bekomme immer noch den Preflight-Fehler, aber jetzt PouchDB erfolgreich authentifiziert, so kann ich einfach den Fehler ignorieren. Ich denke, das Problem ist, dass CouchDB auf OPTIONS auf der _session-URL reagiert.

bearbeiten, weitere Infos hier https://github.com/nolanlawson/pouchdb-authentication/issues/111

+0

Danke für die Anregung. Leider, als ich versuchte, den Ursprung wie beschrieben zu spezifizieren, war das Ergebnis dasselbe wie vorher (gleicher Fehler, keine Authentifizierung). Danke auch für den Link, die Informationen sind sehr hilfreich! – rvighne

Verwandte Themen