Firebase + Nextjs-用户会话共享

reactjs React.js

西里神奇

2020-03-23

问题:

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

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

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

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

我尝试了以下方法:

自定义令牌破解(无法使用ID令牌唱歌)

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

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

在服务器上第二次登录

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

官方说明没有帮助

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

第3040篇《Firebase + Nextjs-用户会话共享》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

1个回答
卡卡西猿 2020.03.23

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

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android