我尝试让 Firebase 会话 Cookie 工作以在所有子域中保留一个身份验证。
现在我有了子域名accounts.mysite.com
我将云功能以及登录表单路由到其中。在那里注册后,我调用我的云功能:
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
但是当我想在子域上调用检查用户函数时,例如hello.mysite.com
我总是收到 403 错误。
检查站点当前设置的 Cookie,因此我不确定为什么它在云功能中不可读。