Firebase + Nextjs - 用户会话共享

Posted

技术标签:

【中文标题】Firebase + Nextjs - 用户会话共享【英文标题】:Firebase + Nextjs - User session sharing 【发布时间】:2019-10-15 08:16:06 【问题描述】:

问题:

我需要在使用 Next.js 和 Firebase(我知道这不是最佳组合)编写的应用程序的服务器端发出数据库请求,以便为客户端准备初始数据。

问题是我想使用在服务器客户端上运行的相同代码(使用服务器上的 firebase 客户端 SDK 处理数据库请求)。

但我不知道如何与服务器端共享用户会话。

服务器没有用户在客户端 SDK 中登录,因此即使客户端可以访问受限资源(它知道当前用户),也会返回 403 限制资源

我尝试了以下方法:

自定义令牌破解(不能使用 ID 令牌唱歌)

目前我必须将用户 ID 令牌添加到 cookie。 这样,令牌会附加到每个后续请求,服务器端可以生成一个自定义令牌(我无法使用 ID 令牌登录),然后我可以通过它登录应用程序的服务器端以及客户端(其中如果启用持久性,则已登录)。

这是一个巨大的矫枉过正,我应该能够以与客户端相同的方式登录服务器,因为它实际上就像客户端本身一样(它不执行任何特权操作)。

第二次登陆服务器

其他解决方案是通过 cookie 发送凭据(安全风险),然后第二次登录服务器。这不适用于一次性身份验证会话(例如一次性电子邮件链接,因为服务器在第二次有效登录)。

官方的例子没有帮助

在 Next.js 存储库中有一个 firbease auth 的示例,它现在已经注释掉了服务器端数据获取。即使它没有被注释掉,它也不会检查用户权限,如果找到用户,它会直接获取数据https://github.com/zeit/next.js/tree/canary/examples/with-firebase-authentication

【问题讨论】:

【参考方案1】:

我有相同的设置(Next.js 和 Firebase),通过反应上下文 API 设置全局会话并不简单。我遵循了这个指南,我成功了https://reacttricks.com/sharing-global-data-in-next-with-custom-app-and-usecontext-hook/

【讨论】:

以上是关于Firebase + Nextjs - 用户会话共享的主要内容,如果未能解决你的问题,请参考以下文章

如何在 nextJS getserversideprops 中使用 firebase

使用refreshToken颤动firebase自动刷新用户会话

React NextJS Firebase 错误刷新名为“[DEFAULT]”的 Firebase 应用程序已存在

Firebase 存储图像未显示在 nextjs 应用程序中

为啥我从托管在 Firebase 上的 NextJs 应用程序仅针对 POST 请求收到“502 网关”错误?

在 Firebase 中退出应用程序后如何保持用户会话