JIRA 的 Ionic CORS 问题 API

Ionic CORS issue with JIRA API

问题描述:我构建了一个离子应用程序,它使用 JIRA rest api 来获取问题(GET 数据),创建问题(POST 数据)。我总是会收到类似 preflight request did not succeed or same origin policy 的 CORS 错误,这在我们使用 ionic serve 时是预期的,但在我构建和发布签名的 apk 时同样不起作用。

我的离子服务器运行在 localhost:8100(离子版本 -4)& Jira 服务器运行于 localhost:8089(JIRA 版本 - 核心 7)

到目前为止我做了什么: 遵循离子博客中提到的代理方法——没有成功

在 JIRA 服务器和白名单 ionic 服务器中启用了 CORS 过滤器插件——没有成功

添加了 headers 允许控制来源 -- 没有成功

使用 --prod release signed 构建 apk 文件并在设备上尝试相同 --No sucess

这是我的 auth.ts 文件参考,如果 any-one 可以帮助和建议我在这里做错了什么。

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","*")
    });
  }
}

根据要求添加了屏幕截图(请不要我故意将 JIRA 服务器更改为 8089 相应地更新了问题)

我通过在容器 (Docker) 中使用 CORS 代理解决了这个问题,因为当您需要访问控制允许来源时:*`!这就像一个代理 https://github.com/imjacobclark/cors-container,现在我可以路由请求了。 希望对其他人有帮助!!