【发布时间】:2023-03-06 07:02:01
【问题描述】:
我有一个 iOS 应用 App1,使用 Firebase 后端,用户可以使用以下方式登录/创建帐户:
- Firebase 帐户(电子邮件/密码)
- Facebook(身份验证后交换 Firebase 凭据)
- Google(身份验证后交换 Firebase 凭据)
这很好用。
我有另一个 iOS 应用 App2,它使用 Firebase 后端,允许用户使用与 App1 完全相同的选项登录/创建帐户(App2 使用与 App1 完全相同的核心代码),此外,第 4 个登录/创建帐户选项:
- Firebase 帐户(电子邮件/密码)
- Facebook(身份验证后交换 Firebase 凭据)
- Google(身份验证后交换 Firebase 凭据)
- 扫描显示在另一台运行 App1 的设备上的二维码
要使用选项 4,QR code sign,App1 上的用户单击“生成 QR 码”按钮,App1 上生成的 QR 码的数据包含 Firebase 凭据 uid 和 displayName。
这一切都很好。 App2 可以读取 App1 二维码中的数据,App2 现在轻松拥有 App1 上登录用户的 uid 和 displayName。
现在我在 App2 上遇到的第一个问题是后来尝试使用 App1 QR 码中的 uid 更新 Firebase 数据库时,Firebase 错误:“Permission Denied”:
明白了,必须认证,我的数据库规则明确表达了这一点,我之前的二维码策略当然不知道这一点:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
然而,我不想将我的 Firebase 规则切换为公开,这将允许任何人访问。所以接下来我想,没问题,我将用户输入的电子邮件/密码作为数据放在 App1 上生成的二维码中,我的应用程序没有高安全性问题,然后,当 App2 扫描 App1 二维码时,App2 就可以了使用从 App1 二维码数据中读取的电子邮件/密码登录 Firebase。
我的解决方案存在一个问题,它不适用于使用 Google 或 Facebook 登录 App1 的用户。在这种情况下,我不会有他们的电子邮件或密码。
我正在考虑的另一个解决方案,但我很确定对我不起作用,请参阅上面的 Firebase“Permission Denied”是 Firebase 的 signInAnonymously,这对我不起作用,因为 Firebase 用户存在,该用户已登录App1上有自己的uid,显然不是signInAnonymously创建的uid。
我正在考虑的另一个解决方案是使用NSUbiquitousKeyValueStore
与 App2 共享来自 App1 的 Firebase 凭据,但我不确定在 Firebase 凭据中需要什么才能在 App2 上重新创建它。我想我仍然需要在 App2 上调用 Auth.auth().signIn 以在 App2 上创建一个新的有效 Firebase 会话,即使我通过 NSUbiquitousKeyValueStore 从 App1 共享了一个有效的 Firebase 凭据/令牌...或其他建议请...
【问题讨论】:
-
永远,永远,永远公开用户的用户名/密码。如果你这样做了,至少告诉他们。
-
@Multinerd 停止你的戏剧
标签: ios objective-c swift firebase qr-code