我正在构建移动客户端应用程序,以便轻松管理Magento电子商务商店,我使用基于令牌的身份验证here,我将ionic2用于我的移动框架。如何在端点不接受OPTIONS方法时解决CORS问题?
我的问题是,该角度HTTP发送OPTIONS
请求,而不是向POST
端点/V1/integration/admin/token
产生400 bad request
因为端点不支持OPTIONS
方法。
这里我的代码:
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map';
import { BaseConfig } from '../../config';
@Injectable()
export class AuthProvider {
public data: any;
public option: any;
constructor(public http: Http) {
console.log('Hello AuthProvider Provider');
}
login(creds: any) {
let headers = new Headers({
'Content-Type': 'application/json'
});
let option = new RequestOptions({
headers: headers,
});
return new Promise((resolve) => {
this.data = this.http.post(BaseConfig.base_url + 'integration/admin/token', creds, option)
.map(res => res.json())
.subscribe((data) => {
resolve(this.data);
},
(error) => {
resolve(this.data);
}
);
});
}
}
我也包括我的.htaccess中的CORS头
Header add Access-Control-Allow-Origin: "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Header add Access-Control-Allow-Headers: "Content-Type"
所以真正的问题是如何防止OPTIONS
方法要求的角度HTTP(我认为是不可能的因为是预检的请求)。
谢谢!
你不能改变后端接受'OPTIONS'请求吗? 'CORS'请求并不是一件有意义的事情,而是一种浏览器。这是CORS标准强制浏览器行为的方式。 –
因此,我应该删除添加到.htaccess中的自定义头文件吗? –
如果您通过在浏览器中运行的前端JavaScript直接向该端点发出请求,那么在此情况下无法避免预检 - 只要端点要求POST的Content-Type为“Content类型:application/json“或”Content-Type:application/xml“,它根据http://devdocs.magento.com/guides/v2.0/get-started/authentication/gs-authentication-token html的。您唯一的选择是在您的前端JavaScript调用和服务器之间放置一些代理,或者只在后端代码中执行。 – sideshowbarker