Firebase verifySessionCookie()导致应用程序在部署到Firebase时超时,但在本地运行良好

时间:2019-02-26 21:15:48

标签: node.js firebase express cookies

在我的Web应用程序中,有一个页面“ interfacePage”,我想限制对该页面的访问(服务器端)。因此,每次调用页面时,我都会使用一个函数来从客户端Cookie中获取Firebase会话Cookie,然后再检查其有效性。如果有效,则显示interfacePage,否则显示登录页面。

代码段

function isAuthenticated(req, res, next){
try {
    var sessionCookie = req.cookies.session;
    console.log(sessionCookie);
    admin.auth().verifySessionCookie(sessionCookie, true)
        .then(function(decodedClaims){
            console.log("token verified");
            next()
                })
        .catch(function(error){
            console.log(error);
            res.redirect('/users/login');
            });
    }catch (err)
    {
        console.log(err);
    }
};

router.get('/interfacePage', isAuthenticated,function (req, res, next) {
//isAuthenticated is called when this get is called. If next() is called from isAuthenticated, then function (req, res, next) is called which renders page
res.render('interfacePage');
});

此代码在本地完全可以正常运行。但是,一旦我部署了它并通过Firebase控制台启动了应用程序,无论何时我请求interfacePage,它都会一直给我网关超时错误。我想可能是

admin.auth().verifySessionCookie(sessionCookie, true)

由于某种原因花了太长时间做出回应。

我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

好吧,很明显,firebase会剥离所有饼干,但名称为“ __session”的饼干除外。我将cookie的名称从session更改为__session,现在可以使用了。

答案 1 :(得分:0)

如果您使用 Firebase Hosting + Cloud Functions,则 __session 是您设计的唯一可以存储的 cookie。这对于我们能够有效地在 CDN 上缓存内容是必要的——我们从请求中去除 __session 以外的所有 cookie。这应该记录在案,但似乎不是(哎呀!)。我们将更新文档以反映此限制。

此外,您需要将 Cache-Control Header 设置为私有

res.setHeader('Cache-Control', 'private")