首页 > 解决方案 > 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,所以我不确定为什么它在云功能中不可读。

标签: javascriptnode.jsfirebasefirebase-authenticationgoogle-cloud-functions

解决方案


没有尝试过任何这些,但是在查看脚本时,我怀疑CSFR保护。我会尝试设置secure: true并且,domain: "mysite.com". 刚刚发现这个,这似乎是相关的:Cross domain state cookie issue for oAuth using firebase functions while on the same domain


推荐阅读