javascript - Firebase 函数会话 Cookie 未在子域上定义
问题描述
我尝试让 Firebase 会话 Cookie 工作以在所有子域中保持一个身份验证。
现在我有了accounts.mysite.com
将 Cloud Functions 路由到的子域以及登录表单。在那里注册后,我调用了我的云函数:
app.get("/authenticate/sign-in-user", async (req:Request, res:Response) => {
const idToken = req.query.token as string;
const expiresIn = 60 * 60 * 24 * 5 * 1000;
let sessionCookie;
try {
sessionCookie = await auth.createSessionCookie(idToken, { expiresIn,});
} catch (e) {
res.status(401).end("Invalid ID Token");
}
const options = {
maxAge: expiresIn,
httpOnly: true,
secure: false,
domain: ".mysite.com",
};
res.cookie("__session", sessionCookie, options);
res.end(JSON.stringify({ status: "success" }));
});
这很完美,并且会话 cookie 已设置,现在在我的函数上检查 cookie 是否有效并返回数据:
app.get("/authenticate/check-user", async (req:Request, res:Response) => {
try {
const sessionCookie = req.cookies.__session || '';
if (!sessionCookie) res.status(403).send('No Cookie found.');
console.log(sessionCookie);
const decodedClaims = await admin.auth().verifySessionCookie(sessionCookie, true);
console.log(decodedClaims);
res.end(JSON.stringify(decodedClaims));
}
catch (e) {
res.status(401).send('The found Cookie is not valid')
}
});
如果我直接从那里调用它,这很好用,accounts.mysite.com
但是当我想在子域上调用 check-user 函数时,就像hello.mysite.com
我总是得到 403 错误一样。
检查站点当前设置了 Cookie,所以我不确定为什么它在云功能中不可读。
解决方案
没有尝试过任何这些,但是在查看脚本时,我怀疑CSFR保护。我会尝试设置secure: true
并且,domain: "mysite.com"
. 刚刚发现这个,这似乎是相关的:Cross domain state cookie issue for oAuth using firebase functions while on the same domain。
推荐阅读
- python-3.x - 如何从包含带空格的字符串的文本文件中创建列?
- android - 尝试使用改造 android 使用发布请求和响应,但无法将 org.json.JSONObject$1 之类的错误转换为 JSONArray
- haskell - 如何在haskell的列表中存储高阶函数数据?
- c++ - 为什么 std::call_once 在加入和分离线程中表现不同?
- sql-server - 如何在链接服务器中运行选择查询
- xamarin.forms - Xamarin iOS 搜索栏自定义
- python - imread 在 Spyder 中有效,但在 VS Code 中无效
- android - app-release 版本与 app-debug 版本有何不同?
- python - Super:超出最大递归深度
- python - 执行代码时如何打开或关闭 Visual Studio python (Jupyter) 交互式窗口 (2019)?