【问题标题】:Mulitple users accessing same userdefault data Swift多个用户访问相同的用户默认数据 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 中可以让用户随心移动。

标签: swift firebase firebase-authentication nsuserdefaults


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多