Ионная проблема CORS с JIRA API - PullRequest
       29

Ионная проблема CORS с JIRA API

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

Описание проблемы: я построил ионное приложение, которое использует api rest JIRA для извлечения проблемы (данные GET), создания проблемы (данные POST).Я всегда получаю ошибку CORS, такую ​​как preflight request did not succeed or same origin policy, которая ожидается, когда мы используем ионную подачу, но она не работает, когда я собираю и выпускаю подписанный apk.

Мой ионный сервер работает на локальном хосте: 8100 (ионная версия -4), а сервер Jira работает на локальном хосте: 8089 (версия JIRA - ядро ​​7)

Что я сделал до сих пор: следовалПрокси-подход, как упомянуто в ионном блоге - Нет успеха

Включен плагин фильтра CORS на сервере JIRA и в белом списке ионного сервера - Нет успеха

Добавлены заголовки для источника разрешения управления - Нет успеха

Создайте файл apk, используя --prod release, подписанный и попробовавший то же самое на устройстве --No sucess

Вот моя ссылка на файл auth.ts, если кто-нибудь может помочь и посоветовать здесь о том, что яздесь я делаю неправильно.

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';

import { AuthProvider } from '../auth/auth';

import { Issue } from '../../models/issue'

@Injectable()
export class JiraProvider {

  apiVersion: string = '2'; // The API version we want to use
  jiraInstanceUrl: string = 'http://localhost:8089' // The Jira instance URL
  urlString: string = `${this.jiraInstanceUrl}/rest/api/${this.apiVersion}`; // Concat those together

  constructor(
    public http: HttpClient,
    public auth: AuthProvider
  ) {
  }

  // Authenticate the user against Jira's profile endpoint.
  public authenticateUser(username: string, password: string): Observable<Object> {

    return this.http.get(`${this.urlString}/myself`, {
      headers: new HttpHeaders()
        .append('Authorization', `Basic ${btoa(username + ':' + password)}`)
        .append("Access-Control-Allow-Origin","*")
    });
  }

  // Get issue details based on the provided key.
  public getIssue(key: string): Observable<Issue> {
    return this.http.get<Issue>(`${this.urlString}/issue/${key}`, {
      headers: new HttpHeaders()
        .append('Authorization', `Basic ${this.auth.getAuthString()}`)
        .append("Access-Control-Allow-Origin","*")
    });
  }

  public getAllIssue():Observable<any> {
    return this.http.get(`${this.urlString}/search?jql=project=PM`,{
      headers: new HttpHeaders()
        .append('Authorization', `Basic ${this.auth.getAuthString()}`)
        .append("Access-Control-Allow-Origin","*")
    });
  }

  public postIssue(data):Observable<any>{
    return this.http.post(`${this.urlString}/issue`,JSON.stringify(data),{
      headers: new HttpHeaders()
        .append('Authorization', `Basic ${this.auth.getAuthString()}`)
        .append('Content-Type','application/json')
        .append("X-Atlassian-Token", "no-check")
        .append("User-Agent", "xx")
        .append("Access-Control-Allow-Origin","*")
    });
  }
}

enter image description here Добавлен скриншот в соответствии с запросом (пожалуйста, не меняйте сервер JIRA намеренно, чтобы 8089 обновил вопрос соответствующим образом)

1 Ответ

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

Я решил эту проблему, используя прокси-сервер CORS в контейнере (Docker), когда вам нужно Access-Control-Allow-Origin: * `!это действует как прокси https://github.com/imjacobclark/cors-container, и теперь я могу направлять запросы.Надеюсь, что это помогает другим !!

...