我正在尝试使用Cloud Functions for Firebase来提供内容,我想检测用户是否已登录。我在firebase.json中设置了一个重写,如下所示:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "public",
"rewrites": [{
"source": "**",
"function": "getProfile"
}]
}
}
这很好用,我根据所请求的路径提供适当的内容。但是,因为我没有在客户端做任何事情(即我使用的是重写而不是客户端重定向),我错过了从客户端脚本获取当前用户的机会。
我是否可以通过某种方式使用请求对象的标头或属性,这样我可以在服务器端重写方案中为登录用户提供不同的内容与未登录的用户?
答案 0 :(得分:2)
Firebase Hosting在调用云功能时会传递名为__session
的任何Cookie。一种简单的方法是在Web应用程序中简单地侦听ID令牌并适当地设置cookie:
firebase.auth().onIdTokenChanged(user => {
if (user) {
user.getIdToken().then(token => {
document.cookie = `__session=${token};max-age=3600`;
});
} else {
document.cookie = '__session=;max-age=0';
}
});
然后,在您的Cloud功能中,您可以从Cookie中解析ID令牌并使用代码like in this sample进行验证。