Я запускаю экземпляр CouchDB, и я пытаюсь использовать аутентификацию cookie для подключения из приложения Ember.
В командной строке я могу успешно выполнить аутентификацию, используя:
curl -vX POST $HOST/_session -H 'Content-Type: application/json' -d '{ "name": "will", "password": "secret" }'
Это генерирует следующий запрос:
POST /_session HTTP/1.1
User-Agent: curl/7.32.0
Host: 127.0.0.1:5984
Accept: */*
Content-Type: application/json
Content-Length: 40
Мой javascript для той же операции:
$.ajax( {
type: 'POST',
url: "%@/_session".fmt( App.Host ),
data: JSON.stringify( { user: $('#username').val(), password: $('#password').val() } ),
dataType: 'json',
contentType: 'application/json'
} )
Это создает соответствующий запрос:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Connection:keep-alive
Content-Length:35
Content-Type:application/json
Host:localhost:5984
Origin:http://localhost
Referer:http://localhost/~will/howlin-wolf/www/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Ответ, хотя и 401, несанкционирован.
Я получаю тот же результат, используя x-www-form-urlencoded
информацию. Запрос на завивание работает:
curl -vX POST $HOST/_session -d 'name=will&password=secret'
В jQuery нет:
$.ajax( {
type: 'POST',
url: "%@/_session".fmt( App.Host ),
data: "user=%@&password=%@".fmt( $('#username').val(), $('#password').val() )
} )
Я использовал user
в запросах jQuery, когда это должно было быть name
.