多个用户访问相同的用户默认数据 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的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中跨多个选项卡访问相同的视图模型

登录时由多个用户访问的核心数据值(iOS Swift)

需要多个用户访问相同数据的现有网站

拒绝Spring Security中具有相同角色的多个用户的访问

如何为多个用户配置 phpMyAdmin - 每个用户只能访问他们的数据库

Parse.com 多用户访问数据 - Swift