我正在構建移動客戶端應用程序,以便輕鬆管理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