【发布时间】:2021-07-27 21:33:25
【问题描述】:
我有两个云函数,youtubeRedirect 和 youtubeToken。在进行 URL 重写之前(如在此处找到 https://firebase.google.com/docs/hosting/functions),一切正常。
youtubeRedirect 将用户带到谷歌身份验证屏幕,并提供对 youtube 令牌功能的重定向。它设置了这两个 cookie
res.cookie('state', state.toString(), { maxAge: 3600000, secure: true, httpOnly: true });
res.cookie('UID', req.query.uid);
当用户重定向到 youtubeToken 时,会检查 cookie 值;
if (!req.cookies.state) {throw new Error('State cookie not set or expired.');}
当对我的自定义域使用 URL 重写时,此时它会失败,因为 req.cookies 是空的。当我在 Chrome 中检查我的 cookie 时,我可以看到已为我的自定义域设置了 cookie。我已经在我的 firebase.json 文件中重写了 youtubeRedirect 和 youtubeToken
"hosting": {
"public": "api",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "/youtubeRedirect",
"function": "youtubeRedirect"
},
{
"source": "/youtubeToken",
"function": "youtubeToken"
}
]
}
身份验证方面工作正常 - 授权重定向 URI 等都事先更改,它曾经重定向到 us-central1-[appName].cloudfunctions.net 现在重定向到我的自定义域。到 youtubeToken 的重定向工作正常 - 我的浏览器 URL 显示我的自定义域。
如果我将所有内容恢复为使用 us-central1-[appName].cloudfunctions.net 函数地址,则一切正常。检查 devtools 中的 cookie 表明 cookie 已按我的预期设置。如果我用我的自定义域运行它,cookie 也在那里......除了函数本身找不到它们。
似乎是在 URL 重写发生之前以某种方式检查了 cookie,并且失败了?真的很难找到解决方案!
当我在 youtubeToken 中返回 us-central1-[appName].cloudfunctions.net 时,我以为我找到了确凿证据,但是将它放在 youtubeRedirect 中具有相同的结果,所以这让我更加困惑......
【问题讨论】:
标签: firebase cookies google-cloud-functions firebase-hosting