【问题标题】:Is it possible to save the same autoID in firebase database and storage?是否可以在 firebase 数据库和存储中保存相同的 autoID?
【发布时间】:2019-12-29 11:40:10
【问题描述】:

我正在尝试组织我的数据库和存储。而且我想使用它为数据库中的用户生成的相同自动ID,以便在我的存储中使用。有可能吗?

这是我用来保存个人资料照片的代码。

 let email = Auth.auth().currentUser?.email else { return }

 let storageRef = Storage.storage().reference().child(email+"/ProfilePhoto/\("Profile Photo")")

而不是使用电子邮件。我希望使用数据库中的用户 autoID。

【问题讨论】:

  • 您确定不想在 Firebase 身份验证中使用用户的唯一 ID?这通常更适合存储每个用户的数据。
  • 如何获取 Firebase 身份验证中的 ID 以用于数据库中的用户 ID?
  • 这是我用来将用户保存在数据库 Database.database().reference().child("User").childByAutoId().setValue(UserDictionary) 以及如何使用它Firebase 存储中的 ID
  • 请不要使用电子邮件作为节点键或路径。它将包含不能用作键的字符,然后您必须对其进行解析并拥有一堆额外的代码。只需使用用户 uid 作为键,也可以作为他们的数据在存储中存储的路径。所以它看起来像 /storage/uid/ProfilePhoto,其中 uid 是 currentUser.uid

标签: swift firebase firebase-realtime-database firebase-storage


【解决方案1】:

在云存储和实时数据库(以及云存储)中存储每个用户信息的最合适方式是登录用户的唯一 ID (UID)。

let uid = Auth.auth().currentUser?.uid else { return }

https://firebase.google.com/docs/reference/swift/firebaseauth/api/reference/Protocols/UserInfo.html#uid

实时数据库生成的自动 ID 不会唯一标识用户。每次都会返回一个随机值。

【讨论】:

【解决方案2】:

获取当前用户的UID:

let uid = Auth.auth().current?.uid
print(uid!)

【讨论】:

  • 成功了。但是 Firebase 数据库的用户中怎么会有“可选”这个词呢?见上图
  • 因为您在数据库中保存了一个可选字符串。您必须使用 ! 使其不是可选的。
  • 例如:var str: String? str = "Hello" print (str) // 可选的 ("Hello") var str: String! str = "Hello" print (str) // "你好"
  • @Nick 不是,因为因为你在数据库中保存了一个可选字符串。此外,Auth.auth() 没有current 变量,它是.currentUser。它是可选的,因为如果没有当前用户,currentUser var 可能是 nil,所以它的属性可能为零。你永远不应该用 !在生产应用程序中,因为它可能导致您的应用程序崩溃。当 var 可以为 nil 时,Swift 使用 Optional 属性 - 这与 Firebase 或存储数据无关。
  • 这里有一个很好的解释和最佳实践的链接。 optionals
猜你喜欢
  • 2020-06-24
  • 2018-06-15
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2017-12-04
  • 1970-01-01
相关资源
最近更新 更多