Несколько пользователей, имеющих доступ к одним и тем же данным пользователя по умолчанию Swift - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть приложение, которое позволяет пользователям создавать новые учетные записи или войти через 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 в пользовательских ошибках.

1 Ответ

0 голосов
/ 18 ноября 2018

Помимо того, что вы можете хранить 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
...