Приложение Angular Hybrid, похоже, не использует тот же сеанс, что и Angularjs. - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть гибридное приложение angular / angularJS, которое, кажется, хорошо работает, в основном просто оболочка для angularjs. В настоящее время мы не используем какие-либо угловые компоненты или сервисы, логика all все еще существует в angularjs.

В качестве шага к переходу на angular я пытаюсь написать новый компонент для отображения некоторых данных, но обнаруживаю, что при выполнении http-запросов он, похоже, не использует тот же сеанс, что и существует под angularjs. точно такой же http запрос под angularJS работает просто отлично, но под Angular я больше не аутентифицируюсь. Вход / аутентификация происходит в соответствии с логикой AngularJS, но поскольку angularjs и angular после компиляции фактически являются одним и тем же «приложением», я не уверен, как это не работает.

Почему это так и как я могу это исправить? Я понятия не имею, какую информацию / код полезно увидеть в этом сценарии, поскольку я не совсем уверен, что здесь даже не так.

Это в моем constructor для углового компонента:

private _listHealthDataUrl: string = "http://localhost:6543/rpc/json/health/get_health_entries";

getData(): Observable<IHealthResponse> {
    return this.http.post<IHealthResponse>(this._listHealthDataUrl, {}, {})
}

И точно такой же запрос сделан из angularJS:

$http({
    url: 'http://localhost:6543/rpc/json/health/get_health_entries',
    method: 'POST',
    data: {}
    }
}).then(function (e) {...})

Заголовки запроса, насколько Chrome говорит мне, точно такие же:

Provisional headers are shown
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=UTF-8
Origin: http://localhost:8080
Referer: http://localhost:8080/health
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36

Заголовки запроса относительно того, что сервер, кажется, читает:

{'Origin': 'http://localhost:8080', 'Content-Length': '2',
 'Cache-Control': 'no-cache',
 'Accept': 'application/json, text/plain, */*',
 'Content_Length': '2',
 'Referer': 'http://localhost:8080/bloodpressure',
 'Content-Type': 'application/json',
 'X-Appengine-Country': 'ZZ',
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36',
 'Pragma': 'no-cache', 
 'Accept-Language': 'en-US,en;q=0.9', 
 'Host': 'localhost:6543', 
 'Content_Type': 'application/json'}

Опять же, точно так же, за исключением AngularJS, заголовки включают заголовок session. Я не уверен, откуда это связано с AngularJS или почему Angular не включает его.

1 Ответ

1 голос
/ 25 апреля 2019

Проблема была в параметрах $http по умолчанию withCredentials. Я ошибся в том, что это был не session заголовок, а cookie с именем session. массивная маска для лица .

В angularJS вы можете просто сделать

$http.defaults.withCredentials = true;

изнутри .run(), но, похоже, угловатые не имеют такой вещи. Исправлено использование перехватчика на HttpClient или иное включение withCredentials в разделе параметров каждого http-запроса.

...