Ionic 2 应用程序 CORS 在使用 AngularFire2 和 Firebase 3 时出错



我正在尝试在我的 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 请求

添加中间服务器,这将使用 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;
};

事实上,在这种方法中,我们不会解决问题,我们只是覆盖它。但我认为这是一个很好的解决方案,因为您只会将其用于开发。

我希望这是有帮助的,祝你好运!

相关内容

  • 没有找到相关文章