Невозможно отправить токен Bearer, установив заголовок авторизации в ионный режим с помощью HttpClient - PullRequest
0 голосов
/ 26 сентября 2018

У меня сервер NodeJS, развернутый в IBM Cloud (Bluemix), в котором служба Restful предоставляется с использованием HTTPS.Сервер также ожидает токен носителя, установив заголовок авторизации.

Сервер работает, и я могу делать тестовые вызовы, используя POSTMAN.Сервер возвращает ожидаемый ответ, когда токен доступен или нет.

Мне не удалось заставить мое приложение Ionic (Ionic 4.1.2) успешно вызвать службу из-за проблем с заголовком Authorization.

Я использую HttpClient следующим образом:

    import { Injectable } from '@angular/core';
    import {HttpClient, HttpHeaders} from "@angular/common/http";
    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/timeout';

    @Injectable()
    export class MyService {
    accessToken = 'here my bearer token';
    url = 'https://mydeployedproject.eu-gb.mybluemix.net/api/myserviceendpoint';

    constructor(private httpClient:HttpClient) {
        }

    getResultsFromBackend() {

      console.log('Calling restful service: ' + url);

const headers = new HttpHeaders({
              'Accept': 'application/json',
              'accept-language':'en-eu',
              'Authorization':'Bearer mybearertoken'
       });

     var response = this.httpClient.get(url,{headers})
                 .subscribe(response => console.log(response));

    return response;
    }

Обратите внимание: со стороны службы я могу отладить заголовок, и я вижу, что заголовки Accept и accept-languageустановлены правильно, когда заголовок содержит только Accept и accept-language.

При добавлении заголовка Authorization вызов get прерывает поток, и вызов get не выполняется правильно, не сервер.

В настоящее время я тестирую с помощью эмулятора iOS с ionic cordova emulate ios --livereload -lc

На стороне сервера , я использую следующее, чтобы разрешить CORS

// CORS (Cross-Origin Resource Sharing) headers to support Cross-site HTTP requests
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});

1 Ответ

0 голосов
/ 27 сентября 2018

Проблема была связана с разрешением заголовков CORS (Cross-Origin Resource Sharing) на стороне сервера (NodeJS).Следующая конфигурация заголовка решила проблему, и приложение ionic наконец смогло успешно запросить бэкэнд с токенами носителя.

app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Credentials", "true");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization");
    next();
});
...