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

标签 ios mysql swift firebase firebase-authentication

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

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

要和Firebase Auth和MySQL通信,我发现用户验证是必须的。
并且JWT(Json Web Token)将用于验证。

但是,要使用 JWT 验证用户,我认为 Firebase Auth 和 MySQL 必须事先有共同的 key (如用户 ID、电子邮件地址等)。

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

我读过多个线程,

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。为了验证用户,在'SignUp'步骤,我是否需要预先在Firebase Auth和MySQL中存储一个公共(public) key ?

问题2-1-1。 (如果是)在 Firebase Auth 和 MySQL 中拥有相同的数据不会成为安全问题吗? (当然,我不能在MySQL中保存任何其他私有(private)数据(密码,电话号码等)

问题2-1-2。 (如果是)您认为公共(public) key 的最佳数据是什么? (用户 ID、电子邮件地址、自动递增的用户 ID 等)

问题2-2。 (如果没有)如何通过 iOS 同步 Firebase 和 MySQL?

问题3。那么,这整个过程是正确的吗?

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



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



最佳答案

不,您不需要提前存储公共(public) key 。

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

关于ios - 如何通过 iOS(swift) 将 Firebase Auth 与 MySQL DB 同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54703955/

相关文章:

mysql - 如何使用链接到第三个表的条件连接两个表

ios - UISearchBarSearchField BackgroundView 颜色

处理 HTTPRequest(JSON) 时,iOS 应用程序有时会崩溃

ios - 如何捕获 Flutter Google 登录 PlatformException?

ios - 在 iOS 上播放 .m3u8 文件

objective-c - iOS 6 中 NSMutableData 到 int 的转换有问题吗?

MySQL查询字段作为不同的数据类型

android - 如何使用volley从android上传用户指定数量的图像或文档?

swift - 更新 UIAlertAction 处理程序中的 UI

ios - bundle 无效——Info.plist 中的 CFBundleVersion 和 CFBundleShortVersionString 必须包含更高版本——但它们确实如此