小编Per*_*ere的帖子

代理 Firebase 函数的跨域状态 cookie 问题

我使用此示例开发了 oAuth 登录。遇到的第一个问题是如果浏览器中禁用了第三方 cookie(现在默认情况下),则状态 cookie 验证。正如这个答案所建议的,我代理了这些功能。

因此,我使用托管重写来代理这些功能,因此您位于同一域中,并且第一个重定向功能设置的服务器 cookie 似乎与应用程序位于同一域中。所以这就是发生的事情

  1. 用户被重定向到云功能,该功能设置 cookie 并将用户重定向到第三方身份验证提供商
  2. 用户登录
  3. 用户再次重定向到应用程序,应用程序获取授权码并将用户重定向到令牌函数
  4. token函数尝试读取状态cookie,但根本没有cookie

当我尝试从 token 函数读取 cookie 时

[Object: null prototype] {}
Run Code Online (Sandbox Code Playgroud)

这是托管重写

"hosting": {
...
"rewrites":  [
  {
    "source": "/redirect",
    "function": "redirect"
  },
  {
    "source": "/token**",
    "function": "token"
  },
  {
    "source": "**",
    "destination": "/index.html"
  }
],
Run Code Online (Sandbox Code Playgroud)

这是重定向功能

exports.redirect = functions.https.onRequest((req, res) => {
  cookieParser()(req, res, () => {
    const redirect_uri = `https://${process.env.GCLOUD_PROJECT}.firebaseapp.com/auth.html`
    const state = req.cookies.state || crypto.randomBytes(20).toString('hex')
    const authorizationUri = fedidClient().authorizationCode.authorizeURL({
      redirect_uri: redirect_uri, …
Run Code Online (Sandbox Code Playgroud)

oauth cross-domain firebase google-cloud-functions

5
推荐指数
1
解决办法
312
查看次数