Как узнать, является ли проблема с логином результатом симулятора или вашего кода? - PullRequest
0 голосов
/ 02 ноября 2019

У меня проблема в том, что когда пользователь заходит на домашнюю страницу после этого, не загружается должным образом, но когда я останавливаю симулятор и запускаю его снова (пользователь все еще вошел в систему с предыдущего запуска), страница отображается нормально. Мне интересно, кроется ли эта проблема в симуляторе или в моем коде.

@IBAction func signInPressed(_ sender: Any) {
if let email = emailField.text, let password = passwordField.text {
    Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
    Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
if let userID = user?.uid {
    KeychainWrapper.standard.set((userID), forKey: "uid")
    self.performSegue(withIdentifier: "tohome", sender: nil) }
if error != nil{
    print("Incorrect")
    let alert = UIAlertController(title: "Error", message: "Incorrect Email or Password.", preferredStyle: UIAlertController.Style.alert)
    let action = UIAlertAction(title: "Ok", style: .default, handler: nil)
    alert.addAction(action)
    self.present(alert, animated: true, completion: nil)
}
else {
    if let userID = user?.uid {
    KeychainWrapper.standard.set((userID), forKey: "uid")
    self.performSegue(withIdentifier: "tohome", sender: nil)
     let databaseRef = Database.database().reference() databaseRef.child("people").child(userID).child("users").setValue(self.emailField.text!)
databaseRef.child("people").child(userID).child("postID").setValue(userID)

1 Ответ

0 голосов
/ 02 ноября 2019

Я бы посоветовал вам снова прочитать документы для входа по электронной почте и паролю. В коде много ошибок. Когда вы создаете пользователя, он входит в систему автоматически, вам не нужно использовать метод входа в систему agin. Во-вторых, вы переходите на новый экран перед сохранением данных в базе данных. Когда у нас есть пользователи по умолчанию, зачем использовать KeychainWrapper?

Сначала создайте класс модели, чтобы вам было легко получить доступ к данным и сохранить данные.

    class User {
var userId: String?
var email : String?
var password: String?
// All the other information you want

init(dictionary:[String: AnyObject]){
 userId = dictionary["userId"] as? String // "this will be your firebase node     //make no typos here you can create a constant if you want"
 email = dictionary["email"] as? String
 password = dictionary["password"] as? String
// All the other database 
}
}

теперь, когда наш класс модели готов, нам будет легко сохранять данные

    func createUserWithEmailAndPassword(){
    if ( emailField.text != "" && passwordField.text != "" {
     let email = emailField.text
     let password = passwordField.text
    Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in
      if error != nil {
      // create error alert how you want.
                 return
     }
    let user = user?.user
    let uid = user?.uid
    let email = user?.email
    let password = user?.password
     // saving the user data locally
    let userDefaults = UserDefaults
    userDefaults.standard.set(uid, forKey: "user_uid")
    userDefaults.standard.set(email, forKey: "user_email")
    // etc etc
    // after that we will be saving this user database to firebase database
   // calling firebase save user function here which we will create below
   self.registerUserToDatabase(uid: uid!, email: email!, password: password!)
       }
    }


func registerUserToDatabase(uid: String, email: String, password: String){
let userDb = Database.database().reference.child("people").child("users").child(uid)
// Make sure the key value in the below dictionary matches the User model class you var you made
let userDictionary = ["userId": uid, "email": email,"password": password] as [String: AnyObject]

userDb.updateChildValues(userDictionary) {(err ,userDb) in
if err != nil {
// alert view for error
}
let users = User(dictionary: userDictionary)
// Below we will navigate to to home screen or which ever screen you want
self.navigateToApp()
}
}

создать навигацию к функции контроллера

func navigateToApp(){
// performe seque method
}

// PS что не так с форматером GitHub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...