swift - 您如何知道登录问题是模拟器造成的还是您的代码造成的?

标签 swift xcode firebase

我遇到的问题是,当用户登录主页后无法正确加载,但是当我停止模拟器并再次运行它时(用户仍然从上次运行中登录),页面显示正常。我想知道这个问题是出在模拟器还是我的代码中。

@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)

最佳答案

建议您再次阅读使用电子邮件和密码登录的文档。 代码中有很多错误。当您创建用户时,它会自动登录,您不必再次使用登录方法。其次,在将数据保存到数据库之前导航到新屏幕。当我们有用户默认值时,为什么要使用 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()
}
}

创建导航到 Controller 功能

func navigateToApp(){
// performe seque method
}

//PS GitHub 格式化程序有什么问题

关于swift - 您如何知道登录问题是模拟器造成的还是您的代码造成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672654/

相关文章:

xcode - Apple Watch 上安装的操作系统版本没有可用的调试符号

java - 通过 Firebase 在 Android 应用程序中进行身份验证 : Get the user’s first and last name

ios - 我可以在应用程序(应用程序关闭时)、iOS、Swift 的后台使用 Firebase 操作吗

java - 如何检索 firebase 数据中的嵌套对象

ios - 从 'FIRRemoteConfigValue!' 转换为无关类型 'String' 总是失败

javascript - 如何使用 SwiftSoup 抓取重定向的特定网站?

ios - 如何在一行内垂直对齐两个 UILabel?

ios - 无法在调度队列中手动控制 performSegue()

iphone - 动态UILabel,将标签推到下面-iOS

ios - Apple iOS Development Guide 上应该没有问题的时候