如何通过 iOS(swift)将 Firebase Auth 与 MySQL DB 同步?

Posted

技术标签:

【中文标题】如何通过 iOS(swift)将 Firebase Auth 与 MySQL DB 同步?【英文标题】:How to sync Firebase Auth with MySQL DB via iOS(swift)? 【发布时间】:2019-07-09 06:42:58 【问题描述】:

我正在 ios 应用中构建注册/登录/保存功能。

对于注册/登录,我选择“Firebase 身份验证”。 但是,Firebase Auth 只能保存基本属性(例如电子邮件地址、密码、URL 等) 所以,为了保存用户的其他属性,我打算单独使用额外的mysql DB。(通过制作用户DB、用户表、用户ID主键和其他列)

为了与 Firebase Auth 和 MySQL 进行通信,我发现用户验证是必须的。 JWT(Json Web Token)将用于验证。

但是,要使用 JWT 验证用户,我认为 Firebase Auth 和 MySQL 都必须事先有共同的密钥(如 userID、E-Mail 地址等)。

但我不确定这是否是常用的方法(简单且安全)。

我已经阅读了多个线程,

Securely store android Firebase Auth users in a MySQL database Can i build an Android app that uses Firebase authentication but a custom database(eg MySQL) Firebase, how to use auth service with a node.js RESTapi backend

但我无法迈出这个过程的第一步。

我现在有问题。 问题1。到目前为止,我的理解是正确的? 问题2。要在“注册”步骤验证用户,我是否需要提前在 Firebase Auth 和 MySQL 中存储一个公用密钥? 问题 2-1-1。 (如果是)在 Firebase Auth 和 MySQL 中拥有相同的数据会不会是一个安全问题? (当然,我不能在 MySQL 中保存任何其他私人数据(密码、电话号码等)) 问题 2-1-2。 (如果是)您认为公共密钥的最佳数据是什么? (用户 ID、电子邮件地址、自动递增的用户 ID 等) 问题 2-2。 (如果没有)如何通过 iOS 同步 Firebase 和 MySQL? 问题3。那么,这整个过程是正确的吗?

    设置 iOS、Firebase Auth、MySQL 当用户注册时,电子邮件地址(可能还有用户 ID)将被发送到 Firebase Auth 和 MySQL。但密码只会发送到 Firebase。 在登录期间,如果用户设置并保存首选项,则 iOS 会将数据发布到 MySQL 中“用户”表中的“用户 ID”行。 当用户再次登录时,iOS 将从 Firebase Auth 获取令牌并发送到 MySQL。 令牌将用于通过比较解密的令牌和 MySQL 的公共密钥来验证用户。 如果验证通过,则 MySQL 会将用户的其他属性发送到 iOS。 iOS 将获取用户的属性数据。

这是我构建此功能的第一次体验。 请回复我的问题! 提前谢谢!

【问题讨论】:

但是,Firebase Auth 只能保存基本属性是不正确的,因为您可以轻松地将更多用户数据存储在 /users/uid 节点中。基本上只要你想要,一旦用户验证,只需读取该节点。可能根本没有理由使用其他数据库 - 在 Firebase 实时数据库和 Firestore 之间,您有很多选择。 【参考方案1】:

不,您不需要预先存储公共密钥。

当用户登录时,您将在您的客户端(iOS 设备)上获得一个 JWT。然后,您将将此 JWT 附加到对您服务器的每个请求的标头中。然后在您的服务器上,您将使用此 JWT 向 Firebase 进行身份验证,如果成功,它将返回您一个用户 ID。并且您可以将其存储在您的数据库中。

【讨论】:

以上是关于如何通过 iOS(swift)将 Firebase Auth 与 MySQL DB 同步?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift Package Manager 将 Google Firebase Admob 添加到 iOS 项目 [关闭]

如何从firebase数据库中检索url并通过UIButton(SWIFT)显示url?

搜索 firebase 数据:iOS、Swift

swift 4如何将firebase Crashlytics用于多个标识符IOS的多个捆绑标识符

Firebase.google.com iOS 中的 Firebase 动态链接(Swift)

Firebase、iOS 和 Swift 入门