我需要在应用程序的服务器端发出数据库请求,该请求是使用 Next.js和Firebase 编写的(我知道这不是最好的组合),以便为客户端准备初始数据。
问题是我想使用在服务器客户端运行的相同代码(使用服务器上的firebase客户端SDK进行数据库请求)。
但是我不知道如何与服务器端共享用户会话。
服务器没有在客户端SDK中登录用户,因此即使客户端可以访问受限资源(知道当前用户),也会返回403以获取受限资源
当前,我必须将用户ID令牌添加到cookie。 这样,令牌将附加到每个后续请求中,并且服务器端可以生成自定义令牌(我无法使用ID令牌登录),然后我可以通过该令牌在应用程序的服务器端以及客户端(如果启用了持久性,则已经登录)。
这是一个巨大的矫over过正,我应该能够以与客户端相同的方式在服务器上登录,因为它实际上就像是客户端本身(它不执行任何特权操作)。
其他解决方案是通过cookie发送凭据(存在安全风险),然后第二次登录服务器。这不适用于一次性身份验证会话(例如一次性电子邮件链接,因为服务器第二次有效登录)。
在Next.js存储库中,有一个关于firbease auth的示例,该示例现在已注释掉了服务器端数据的获取。即使未注释掉它也不在检查用户权限,但是只要找到用户https://github.com/zeit/next.js/tree/canary/examples/with-firebase-authentication
,它就会直接获取数据。答案 0 :(得分:0)
我有相同的设置(Next.js和Firebase),并且不是很容易通过react context API设置全局会话。我遵循了本指南,并成功https://reacttricks.com/sharing-global-data-in-next-with-custom-app-and-usecontext-hook/