Проблема CORS с запросом OPTIONS - PullRequest
0 голосов
/ 09 июня 2018

Я работаю над приложением, созданным с углом 5 и сталкивающимся с проблемами с CORS, чтобы авторизовать пользователей, я использую метод токена jwt и отправляю его в заголовках, используя jwt.interceptor следующим образом

export class JwtInterceptor implements HttpInterceptor {
    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        // add authorization header with jwt token if available
        let currentUser = JSON.parse(localStorage.getItem('currentUser'));
        if (currentUser && currentUser.token) {
            request = request.clone({
                setHeaders: { 
                    Authorization: `Bearer ${currentUser.token}`,
                    Ip:currentUser.Ip
                }
            });
        }
        return next.handle(request);
    }
}

этот код изменяет заголовок и добавляет токен / носитель, потому что эта модификация браузеры отправляет предварительные запросы OPTIONS перед фактическим API, я использую httpclient для отправки запросов API следующим образом

merchantDefaultSetup(ipAddress) {
      if(this.access_token != '')
      {
         this.coreService.setMerchantDefaultSetup(this.access_token, ipAddress).subscribe(res => {this.apiResponse = res},
                                                                         err => console.log(err),
                                                                         ()  => this.checkSetMerchantDefaultSetupApiResponse(this.apiResponse)
                                                                        );
      }
      else
      {
        this.router.navigate(["/dashboard"]);
      }
   }

, и эта функция использует следующую службу

public setMerchantDefaultSetup(token, ipAddress)
   {
      let header = new HttpHeaders({'Content-Type': 'application/json', 'Ip': ipAddress});
      return this.http.get<Response>(this.apiUrl+'merchant/default-setup/'+token, {headers: header}).map(response => response.response);
   }

код выше работает правильно, когда api и код приложения находятся на одном сервере, но я не создал два экземпляра ec2 на aws для раздельного размещения api и приложений.

Ниже приведена ошибка, которую я получаюon api hit

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://mydomain.mytestsite.com:8080/api/v1/merchant/default-setup/678as6d98a6s8d68. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing)

REST API построен с использованием golang и работает на порте 8080

Все статьи дают решение для методов get, post, put, но в моем случае они работают нормально, если толькоесть любой предполетный запрос ОПЦИИ

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

рассматривали ли вы возможность использования пакета https://github.com/rs/cors?

с пакетом cors, вы можете легко проверить ваше соединение с помощью метода AllowAll ().Он обрабатывает запрос OPTIONS для вас.

handler := cors.AllowAll().Handler(mux)
go func() {
    http.ListenAndServe(":5050", handler)
}()

Запросы перекрестного происхождения запрещены по умолчанию.Вы можете разрешить дополнительные источники для вашего приложения.Однако в производственной среде вы не должны использовать AllowAll (), а определять разрешенные источники.

0 голосов
/ 09 июня 2018

Вам не нужно ничего делать в вашем угловом приложении, чтобы оно работало, потому что CORS - это конфигурация на стороне сервера .По сути, он говорит, кто может вызвать ваш API и какие методы / заголовки / другие вещи.Получив надлежащие заголовки в ответе на запрос браузера OPTIONS, затем решает, разрешено ли вам делать этот вызов или нет.Угловое приложение не имеет к этому никакого отношения.Итак, ошибка, которую вы получаете, говорит о том, что вы неправильно настроили CORS на своем веб-сервере.Например, вы можете начать с этой статьи о том, как включить ее на веб-сервере GO.

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