多用户访问相同的用户默认数据Swift

时间:2018-11-18 05:32:42

标签: swift firebase firebase-authentication nsuserdefaults

我有一个允许用户创建新帐户或通过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中。

1 个答案:

答案 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