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 应用程序中