我正在尝试在我的 Ionic 2 应用程序中使用 AngularFire2 插件来使用自定义令牌对 Google API 进行授权,同时在我的计算机上使用 Chrome 进行开发。在我的Android手机上测试它工作正常,请求有效,一切正常。但我正在尝试让它在我的开发环境中也能工作。
我在 Chrome 中运行应用时遇到的错误是(我删除了密钥(:
OPTIONS https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=<mykey>
XMLHttpRequest cannot load https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=<mykey>. Response for preflight has invalid HTTP status code 404
告诉我我有问题向谷歌服务器发出选项预请求。问题是我已经安装了Chrome插件Allow-Control-Allow-Origin:*,并在Chrome启动时添加了"--disable-web-security"参数。这适用于其他服务,但不适用于该特定请求的AngularFire2。
我发现人们有同样的问题,建议切换到Firefox,我不会这样做,因为它会破坏SQLight存储等其他插件。有没有办法在Chrome浏览器中完成这项工作?
添加中间服务器,这将使用 CORS 预检发出 HTTP 请求,并仅针对开发模式返回结果。我在我的一个项目中使用了这种方法,因为我只有一个客户端。
所以你可以这样做:
getMyInfo(info: Info, provider?: string) {
if (!provider) {
provider = 'corsanywhere';
}
this.crossGet(`http://google_apis/${Info}/`,`${provider}`).map(res => res.json())
.subscribe(res => {
// GOT RESULT
console.log("Res: " + res);
});
}
这些是您可以使用的提供程序:
corsanywhere(url: string, options: any): any {
var promise = this.http.get('https://cors-anywhere.herokuapp.com/' + url);
return promise;
};
corsnow(url: string, options: any): any {
var promise = this.http.get('https://cors.now.sh/' + url);
return promise;
};
crossGet(url: string, provider: any, options?: any): any {
var promise = this[provider](url, options);
return promise;
};
事实上,在这种方法中,我们不会解决问题,我们只是覆盖它。但我认为这是一个很好的解决方案,因为您只会将其用于开发。
我希望这是有帮助的,祝你好运!