域和子域之间的 Firebase 身份验证共享

Posted

技术标签:

【中文标题】域和子域之间的 Firebase 身份验证共享【英文标题】:Firebase Authentication sharing between domain and subdomain 【发布时间】:2021-11-19 07:17:16 【问题描述】:

我有两个使用 Flutter 创建的网站。

一个网站部署在主域上,另一个网站部署在已经部署了第一个站点的主域的子域上。

两个网站都使用相同的 Firebase 项目,因此,两者的身份验证详细信息和用户群相同。

我想要实现的是当用户登录一个网站时,他不需要登录另一个网站。另一个网站只是将其检测为已登录的用户。这是一种单一的符号。

我浏览了 firebase 文档,但没有获得有关如何实现它的任何指导。 custom token 可能是实现它的一种方法,但我担心它会使身份验证变得复杂。

任何指针或指导将不胜感激。

【问题讨论】:

刚刚找到这个参考:dev.to/johncarroll/… 检查我是否能得到一些指导。 【参考方案1】:

最简单的方法是使用Firebase Session Cookies。当用户登录时,调用Cloud Function(或您的服务器)并使用Admin SDK 使用createSessionCookie() 方法生成会话cookie。然后您可以在.domain.tld 上设置cookie,并且可以从您的所有子域访问该cookie。

但是,这意味着您可能必须通过云函数或服务器来处理您的所有请求,因为您无法将 Firebase 安全规则(除非用户仍使用 Firebase SDK 登录)与会话 cookie 一起使用。在提供资源之前,必须在服务器端验证 cookie。

一种解决方法是检查用户是否通过 Firebase SDK 登录子域。如果没有,则检查用户首次登录根域时添加的 session cookie 是否存在。如果 cookie 存在,则生成自定义令牌并使用自定义令牌通过 Firebase SDK 登录用户,否则将用户重定向到登录页面。

【讨论】:

以上是关于域和子域之间的 Firebase 身份验证共享的主要内容,如果未能解决你的问题,请参考以下文章

具有多个域和子域的 PHP 身份验证

有没有办法让一个人在跨子域的 firebase 上进行身份验证

可以在firebase中的ios和android项目之间共享用户进行身份验证

如何使用 Firebase 身份验证和托管将登录用户重定向到子域?

通过多个 Laravel 5 安装跨子域共享身份验证会话

如何在主 iOS 应用程序及其共享扩展程序之间使用相同的经过身份验证的用户令牌