2017-01-17 264 views
2

试图实现谷歌的OAuth2和使用https://github.com/google/google-api-nodejs-client#authorizing-and-authenticating作为参考。当用户重定向到同意页面这样谷歌的OAuth2:重定向已被封锁的CORS政策:请求需要预检,这是不允许跟随跨域重定向

var url = oauth2Client.generateAuthUrl({ 
    access_type: 'offline', 
    scope: some_scope 
    }); 
res.redirect(url); 

我得到了浏览器控制台这个错误(链接编辑):

的XMLHttpRequest无法加载本地主机:8080/myPageName。从本地主机:8080/myPageName重定向到accounts.google.com/o/oauth2/auth?access_type = ...已被CORS策略阻止:请求需要预检,这是不允许跟踪跨源重定向的。

奇怪的是,只有在执行GUI流程(用户按下按钮; angular2前端)时才会出现此错误。当我将localhost:8080/myPageName直接放入浏览器地址栏时,一切正常(取得同意书表格,然后标记)。

任何帮助表示赞赏。谢谢。

+0

我收到同样的问题:(从Java应用程序春天做,但得到相同的行为。击球路径直接作用(帐户等提示)。 – trojanc

+0

一看便知在http://stackoverflow.com/问题/ 34949492/cors-request-with-preflight-and-redirect-disallowed-workarounds/39728229#39728229有关如何解决此问题的详细信息。另请注意,此重定向限制不再在规范中,但浏览器需要更新他们的实现以符合规格更改。 – sideshowbarker

回答

1

我有同样的问题(与一个反应的前端,但它是一样的)。 这可能是因为从服务器使用重定向,这会触发CORS(即使从您的服务器允许它)。

你必须重定向URL返回到您的前端在一些其他的方式,从前端应用程序捕捉到它,然后调用需要调用的URL。

0

一个简单的解决方案是创建所需的查询参数隐藏的链接,然后单击使用JavaScript的链接,如果谷歌支持HTTP POST提交,然后一个隐藏的表单可以创建并提交再直接使用JavaScript魔法绕过CORS限制其我想是已经删除或将在不久的将来被删除。