gpt4 book ai didi

ios - 在两个 iOS 应用程序之间共享 Firebase 身份验证/ token

转载 作者:行者123 更新时间:2023-11-30 12:19:25 24 4
gpt4 key购买 nike

我有一个使用 Firebase 后端的 iOS 应用 App1,用户可以使用以下方式登录/创建帐户:

  1. Firebase 帐户(电子邮件/密码)
  2. Facebook(身份验证后交换为 Firebase 凭据)
  3. Google(身份验证后交换为 Firebase 凭据)

这很好用。

我有另一个使用 Firebase 后端的 iOS 应用 App2,它允许用户使用与 App1 完全相同的选项登录/创建帐户(App2 使用与 App1 使用的核心代码完全相同),此外,第四个登录/创建帐户选项:

  1. Firebase 帐户(电子邮件/密码)
  2. Facebook(身份验证后交换为 Firebase 凭据)
  3. Google(身份验证后交换为 Firebase 凭据)
  4. 扫描运行 App1 的另一台设备上显示的二维码

要使用选项 4,QR code sign其中,App1 上的用户单击“生成二维码”按钮,App1 上生成的二维码的数据包含 Firebase 凭证 uid 和 displayName。

这一切都运行良好。 App2 可以读取 App1 二维码中的数据,App2 现在可以轻松获得 App1 上登录用户的 uid 和 displayName。

现在,当我后来尝试使用 App1 二维码中的 uid 更新 Firebase 数据库时,我在 App2 上遇到了第一个问题,Firebase 错误:“权限被拒绝”:

enter image description here

明白,必须进行身份验证,我的数据库规则清楚地表达了这一点,当然,在我的二维码策略之前我并不知道这一点:

{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}

但是,我不想将 Firebase 规则切换为公开,因为这样任何人都可以访问。所以接下来我想,没问题,我只是将用户输入的电子邮件/密码作为数据放在 App1 上生成的二维码中,我的应用程序没有很高的安全隐患,那么,当 App2 扫描 App1 的二维码时,App2 就可以了使用从 App1 二维码数据中读取的电子邮件/密码登录 Firebase。

我的解决方案有一个问题,它不适用于通过 Google 或 Facebook 登录 App1 的用户。在这种情况下,我不会知道他们的电子邮件或密码。

我正在考虑的另一个解决方案,但我很确定不会为我工作,请参阅上面的 Firebase“权限被拒绝”是 Firebase 的 signInAnonymously ,这对我不起作用,因为 Firebase 用户存在,该用户在 App1 上登录,有自己的 uid,这显然不是由 signInAnonymously 创建的 uid。

我正在考虑的另一个解决方案是使用 NSUbiquitousKeyValueStore
与 App2 共享 App1 中的 Firebase 凭据,但我不确定 Firebase 凭据中需要什么才能在 App2 上重新创建它。我想我还是得打电话Auth.auth().signIn即使我通过 NSUbiquitousKeyValueStore 从 App1 共享了有效的 Firebase 凭证/ token ,也可以在 App2 上创建新的有效 Firebase session 。 ...或者其他建议请...

最佳答案

感谢信息herehere我意识到我可以添加一个具有管理员“角色”的 Firebase 帐户。这样,当我从 QR 代码中检索 uid 和 displayName 时(即使具有对 Firebase 数据库的完全访问权限,QR 代码除了 uid 之外还必须包含 displayName,如 you cannot retrieve it later),我可以仅以管理员 Firebase 帐户身份登录,我可以通过以下数据库规则更改来写入和读取 uid 中传递的 QR 码,请注意,我确实创建了一个“用户”数据库,这就是我存储角色的位置:

{
"rules": {
"users": {
".read": "root.child('users').child(auth.uid).child('role').val() == 'admin'",
".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'",
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
}
}
}

关于ios - 在两个 iOS 应用程序之间共享 Firebase 身份验证/ token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44982496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com