多个用户访问相同的用户默认数据 Swift
Posted
技术标签:
【中文标题】多个用户访问相同的用户默认数据 Swift【英文标题】:Mulitple users accessing same userdefault data Swift 【发布时间】:2018-11-18 05:32:41 【问题描述】:我有一个应用程序允许用户创建新帐户或通过 facebook/Google 登录。一些次要数据(如配置文件名称等)存储在用户默认值中。我正在使用 Firebase 进行登录。
问题:在用户 A 退出其帐户并且用户 B 登录后,用户 A 的数据(保存到用户默认值)对用户 B 可见。
我想要的:显然这不应该发生,用户 B Should not
看到用户 A 的数据。我怎样才能做到这一点?
退出代码
@IBAction func logout(_ sender: Any)
if Auth.auth().currentUser != nil
do
try Auth.auth().signOut()
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Login")
present(vc, animated: true, completion: nil)
catch let error as NSError
print(error.localizedDescription)
else
GIDSignIn.sharedInstance()?.signOut()
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Login")
present(vc, animated: true, completion: nil)
let firebaseAuth = Auth.auth()
do
print("logged out success!")
try firebaseAuth.signOut()
catch let signOutError as NSError
print ("Error signing out: %@", signOutError)
编辑: 我刚刚开始将 UID 存储到 userdefaults 中。
【问题讨论】:
将用户的电子邮件添加到默认字典中的键中 @palebone 感谢您的回复。你能告诉我你的意思吗? 这里的简单解决方案是不要在 UserDefaults 中存储这样的数据;将其存储在 Firebase 中。当用户进行身份验证时,从 Firebase 数据库中读取您需要的任何数据,然后您就完成了。如果您使用 UserDefaults,当用户在不同的设备上登录时,他们将没有默认设置 - 将其存储在 FB 中可以让用户随心移动。 【参考方案1】:除了您可以将Data
对象存储在UserDefaults
中(这意味着可以是具体的Codable
结构)这一事实之外,您还可以将dictionaries
存储在UserDefaults 中。
假设您有两个用户,您需要存储有关的信息,而识别此用户的方式是通过用户名。
这将是您的存储代码,您会看到如何将所需的所有详细信息“打包”到Dictionary
中,并按用户名将其存储在默认值中。这意味着每当您需要检索信息时,您只需要一个用户名。
var userDict: [String: Any] = [:]
let username: String = "user@name"
let age: Int = 25
let language: String = "en"
userDict = ["username": username,
"age": age,
"language": language]
UserDefaults.standard.set(userDict, forKey: username)
并在将来检索这本词典以及您需要的所有信息:
let userData = UserDefaults.standard.dictionary(forKey: username)
现在可以从中获取您的东西:
let age = userData["age"] // 25
let language = userData["language"] // en
【讨论】:
以上是关于多个用户访问相同的用户默认数据 Swift的主要内容,如果未能解决你的问题,请参考以下文章
拒绝Spring Security中具有相同角色的多个用户的访问