Google OAuth2:重定向已被 CORS 策略阻止:请求需要预检,不允许遵循跨域重定向

Google OAuth2: Redirect has been blocked by CORS policy: Request requires preflight, which is disallowed to follow cross-origin redirect

尝试实施 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 cannot load localhost:8080/myPageName. Redirect from localhost:8080/myPageName to accounts.google.com/o/oauth2/auth?access_type=... has been blocked by CORS policy: Request requires preflight, which is disallowed to follow cross-origin redirect.

奇怪的是,我仅在从 GUI 执行流程时收到此错误(用户按下按钮;angular2 前端)。当我将 localhost:8080/myPageName 直接放入浏览器地址栏时,一切正常(获得同意书,然后是令牌)。

感谢任何帮助。谢谢。

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

您必须 return 以其他方式将 URL 重定向到您的 front-end,从 front-end 应用程序捕获它,然后调用 URL 你需要调用。

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