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,现在我可以路由请求了。
希望对其他人有帮助!!
问题描述:我构建了一个离子应用程序,它使用 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","*")
});
}
}
我通过在容器 (Docker) 中使用 CORS 代理解决了这个问题,因为当您需要访问控制允许来源时:*`!这就像一个代理 https://github.com/imjacobclark/cors-container,现在我可以路由请求了。 希望对其他人有帮助!!