Google OAuth2:重定向已被 CORS 政策阻止:请求需要预检,不允许遵循跨域重定向
Posted
技术标签:
【中文标题】Google OAuth2:重定向已被 CORS 政策阻止:请求需要预检,不允许遵循跨域重定向【英文标题】:Google OAuth2: Redirect has been blocked by CORS policy: Request requires preflight, which is disallowed to follow cross-origin redirect 【发布时间】:2017-06-01 20:56:10 【问题描述】:尝试实现 Google OAuth2 并使用 https://github.com/google/google-api-nodejs-client#authorizing-and-authenticating 作为参考。当将用户重定向到这样的同意页面时
var url = oauth2Client.generateAuthUrl(
access_type: 'offline',
scope: some_scope
);
res.redirect(url);
我在浏览器控制台中收到此错误(链接已编辑):
XMLHttpRequest 无法加载 localhost:8080/myPageName。从 localhost:8080/myPageName 重定向到 accounts.google.com/o/oauth2/auth?access_type=... 已被 CORS 政策阻止:请求需要预检,不允许进行跨域重定向。
奇怪的是,我只有在从 GUI 执行流程时才会收到此错误(用户按下按钮;angular2 前端)。当我将 localhost:8080/myPageName 直接放入浏览器地址栏中时,一切正常(获取同意书,然后获取令牌)。
感谢任何帮助。谢谢。
【问题讨论】:
我遇到了同样的问题 :( 从 java spring 应用程序执行此操作,但行为相同。直接点击路径有效(提示帐户等)。 请参阅***.com/questions/34949492/… 的答案,了解如何解决此问题的详细信息。同样如前所述,此对重定向的限制不再在规范中,但浏览器需要更新其实现以匹配规范更改。 【参考方案1】:我遇到了同样的问题(有一个反应前端,但它是一样的)。 这可能是因为从您使用重定向的服务器触发 CORS(即使您允许从您的服务器)。
您必须以其他方式将重定向 URL 返回到您的前端,从前端应用程序捕获它,然后调用您需要调用的 URL。
【讨论】:
【参考方案2】:一个简单的解决方案是使用所需的查询参数创建一个隐藏链接,然后使用 javascript 单击该链接,如果 google 支持 HTTP POST 提交,则可以创建一个隐藏表单并使用 JavaScript 魔术再次直接提交以绕过我的 CORS 限制猜测要么已经被删除,要么将在不久的将来被删除。
【讨论】:
以上是关于Google OAuth2:重定向已被 CORS 政策阻止:请求需要预检,不允许遵循跨域重定向的主要内容,如果未能解决你的问题,请参考以下文章
XMLHttprequest 无法加载 [link]。从 [link] 重定向到已被 laravel 5 中的 CORS 策略阻止
重定向循环中的 Spring Security OAuth2 (google) web 应用程序