Firebase + Nextjs-用户会话共享

时间:2019-05-29 16:51:58

标签: reactjs firebase firebase-authentication next.js

问题:

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

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

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

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

我尝试了以下方法:

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

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

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

第二次登录服务器

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

官方说明没有帮助

在Next.js存储库中,有一个关于firbease auth的示例,该示例现在已注释掉了服务器端数据的获取。即使未注释掉它也不在检查用户权限,但是只要找到用户https://github.com/zeit/next.js/tree/canary/examples/with-firebase-authentication

,它就会直接获取数据。

1 个答案:

答案 0 :(得分:0)

我有相同的设置(Next.js和Firebase),并且不是很容易通过react context API设置全局会话。我遵循了本指南,并成功https://reacttricks.com/sharing-global-data-in-next-with-custom-app-and-usecontext-hook/