CouchDb GET _session не устанавливает заголовок cookie из браузера в Angular7 - PullRequest
1 голос
/ 14 июня 2019

У меня угловое 7 приложение, выполняющее аутентификацию с Couchdb Cookie устанавливается в браузере при выполнении POST _session с учетными данными. Но опять же при выполнении GET _session для проверки статуса аутентификации cookie не устанавливается автоматически даже после использования withCredentials: true в заголовке POST.

Запрос POST:

    let _httpHeaders = new HttpHeaders();
    _httpHeaders = _httpHeaders.set('Accept', 'application/json');
    _httpHeaders = _httpHeaders.set('Content-type', 'application/json');
    _httpHeaders = _httpHeaders.set('Authorization', 'Basic ' + btoa(data.name + ':' + data.password));
    const options = { headers: _httpHeaders, withCredentials: true };
    console.log(options);
    return this._httpService.doAsyncTask(AppConstants.LOGIN_URL, 'POST', data, options);

Запрос GET:

 return this._httpService.doAsyncTask(AppConstants.LOGIN_URL + '?basic=true', 'GET');

Установка withCredentials: true в заголовке для запроса GET также не работает.

Ответ, который я получаю:

{"error": "unauthorized", "reason": "Пожалуйста, войдите в систему."}

Заголовки запроса и ответа для вызова GET: Заголовок запроса:

 Accept: application/json, text/plain, */*
    Origin: http://localhost:5800
    Referer: http://localhost:5800/login
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Заголовок ответа:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:5800
Access-Control-Expose-Headers: content-type, cache-control, accept-ranges, etag, server, x-couch-request-id, x-couch-update-newrev, x-couchdb-body-time
Cache-Control: must-revalidate
Connection: keep-alive
Content-Length: 50
Content-Type: application/json
Date: Fri, 14 Jun 2019 09:41:31 GMT
Server: nginx/1.10.3 (Ubuntu)
X-Couch-Request-ID: 3fb687405b
X-CouchDB-Body-Time: 0

1 Ответ

0 голосов
/ 15 июня 2019

Я решил это. Заголовок withCredentials: true должен быть установлен для запроса GET. Правильный способ отправить это:

    let _httpHeaders = new HttpHeaders();
    _httpHeaders = _httpHeaders.set('Accept', 'application/json');
    _httpHeaders = _httpHeaders.set('Content-type', 'application/json');
    const options = { headers: _httpHeaders, withCredentials: true };
    return this._httpService.doAsyncTask(AppConstants.LOGIN_URL + '?basic=true', 'GET', '', options);

В ответ вы получите объект userCtx.

{"ok":true,"userCtx":{"name":"username","roles":["sales"]},"info":{"authentication_db":"_users","authentication_handlers":["cookie","default"],"authenticated":"cookie"}}

Надеюсь, это поможет кому-то с такой же проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...