Firebase + Nextjs - 用户会话共享



问题:

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

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

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

服务器没有用户在客户端 SDK 中登录,因此对于受限资源返回 403,即使客户端有权访问这些资源(它知道当前用户)

我尝试了以下方法:

自定义令牌黑客(不能使用 ID 令牌唱歌)

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

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

在服务器上第二次登录

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

官方的扩展没有帮助

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

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

最新更新