我有一个允许用户创建新帐户或通过Facebook / Google登录的应用程序。一些次要数据(如配置文件名称等)存储在用户默认设置中。我正在使用Firebase进行登录。
问题:用户A注销其帐户并且用户B登录之后,用户B可以看到用户A的数据(保存为用户默认值)。
我想要的是:显然不会发生,用户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中。
答案 0 :(得分: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