2017-10-15 60 views
0

我一直在試圖找出這個問題了幾天,似乎無法找到一個解決方案。當我在我的應用程序中按創建帳戶,它創建它沒有任何信息

問題是:當我嘗試在我的應用程序中創建一個帳戶時,它會自動創建一個帳戶而不輸入任何信息。所以基本上用戶不會輸入任何信息,帳戶仍在創建。

我目前使用火力地堡

下面是該視圖的代碼:

import UIKit 
import Firebase 

class createAccountVC: UIViewController { 

private let RIDER_SEGUE = "createAccountSegue" 

@IBOutlet weak var emailTextField: UITextField! 
@IBOutlet weak var passwordTextField: UITextField! 
@IBOutlet weak var confirmPasswordTextField: UITextField! 
@IBOutlet weak var createAccountButton: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    createAccountButton.titleLabel?.numberOfLines = 2 
    createAccountButton.titleLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping 
} 

private func alertTheUser(title: String, message: String) { 
    let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) 
    let ok = UIAlertAction(title: "OK", style: .default, handler: nil) 
    alert.addAction(ok) 
    present(alert, animated: true, completion: nil) 
} 


@IBAction func signUp(_ sender: AnyObject) { 

if emailTextField.text != "" && passwordTextField.text != "" && confirmPasswordTextField.text != "" { 

    AuthProvider.Instance.signUp(withEmail: emailTextField.text!, password: passwordTextField.text!, loginHandler: { (message) in 
     if message != nil { 
      self.alertTheUser(title: "Problem with creating a new user.", message: message!) 
     } else { 
      GroomrHandler.Instance.rider = self.emailTextField.text! 
      self.saveUserInfo(email: self.emailTextField.text!, password: self.passwordTextField.text!) 
      self.emailTextField.text = "" 
      self.passwordTextField.text = "" 
      self.confirmPasswordTextField.text = "" 
      //self.performSegue(withIdentifier: self.RIDER_SEGUE, sender: nil) 
      // save password to keychain 
     } 

    }) 

} else { 
    alertTheUser(title: "Email and password are required.", message: "Please enter email and password in the text fields.") 
} 

} 
func saveUserInfo(email: String, password: String) { 

    //save login info in app 
    UserDefaults.standard.set(email, forKey: "email") 



} 
} 

預先感謝您!不要火焰我,我還在學習XD

編輯:這裏是AuthProvider文件:

import Foundation 
import Firebase 

typealias LoginHandler = (_ msg: String?) -> Void 

struct LoginErrorCode { 
static let INVALID_EMAIL = "Invalid email address, please provide a  real email address." 
static let WRONG_PASSWORD = "Wrong password, please enter the correct password." 
static let PROBLEM_CONNECTING = "Problem connecting to database, please try later." 
static let USER_NOT_FOUND = "User not found, please register." 
static let EMAIL_ALREADY_IN_USE = "Email already in use, please use another email." 
static let WEAK_PASSWORD = "Password should be at least 6 characters long." 
} 

class AuthProvider { 
private static let _instance = AuthProvider() 

static var Instance: AuthProvider { 
    return _instance 
} 

func login(withEmail: String, password: String, loginHandler: LoginHandler?) { 

    Auth.auth().signIn(withEmail: withEmail, password: password, completion: { (user, error) in 

     if error != nil { 
      self.handleErrors(err: error! as NSError, loginHandler: loginHandler) 
     } else { 
      loginHandler?(nil) 
     } 

    }) 

} // login func 

func signUp(withEmail: String, password: String, loginHandler: LoginHandler?) { 

    Auth.auth().createUser(withEmail: withEmail, password: password, completion: { (user, error) in 

     if error != nil { 
      self.handleErrors(err: error! as NSError, loginHandler: loginHandler) 
     } else { 

      if user?.uid != nil { 


       // login the user 
       self.login(withEmail: withEmail, password: password, loginHandler: loginHandler) 

      } 

     } 

    }) 

} // sign up func 

func logOut() -> Bool { 
    if Auth.auth().currentUser != nil { 
     do { 
      try Auth.auth().signOut() 
      return true 
     } catch { 
      return false 
     } 
    } 
    return true 
} 

private func handleErrors(err: NSError, loginHandler: LoginHandler?) { 

    if let errCode = AuthErrorCode(rawValue: err.code) { 

     switch errCode { 

     case .wrongPassword: 
      loginHandler?(LoginErrorCode.WRONG_PASSWORD) 
      break 

     case .invalidEmail: 
      loginHandler?(LoginErrorCode.INVALID_EMAIL) 
      break 

     case .userNotFound: 
      loginHandler?(LoginErrorCode.USER_NOT_FOUND) 
      break 

     case .emailAlreadyInUse: 
      loginHandler?(LoginErrorCode.EMAIL_ALREADY_IN_USE) 
      break 

     case .weakPassword: 
      loginHandler?(LoginErrorCode.WEAK_PASSWORD) 
      break 

     default: 
      loginHandler?(LoginErrorCode.PROBLEM_CONNECTING) 
      break 

     } 

    } 

} 

} // class 
+0

你是什麼意思,它創建沒有任何信息的帳戶?我想你想要的是https://firebase.google.com/docs/auth/ios/start和這個Auth.auth()。createUser(withEmail:email,password:password)。 – Mike

+0

同樣的問題,它仍然創建一個帳戶,即使我不把電子郵件,密碼,確認密碼,在文本框中,只是直接轉到其他視圖。 – Adeel

+0

如果文本框中有值,它會創建一個包含憑據的帳戶? – Arrabidas92

回答

0

我在註冊用戶的一些經驗,這裏是我的代碼,您可以嘗試它。希望它有幫助。

這用戶對象:

Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in 
     if error == nil { 
      user?.sendEmailVerification(completion: nil) 
      let storageRef = Storage.storage().reference().child("usersProfilePics").child(user!.uid) 
      let imageData = UIImageJPEGRepresentation(profilePic, 0.1) 
      storageRef.putData(imageData!, metadata: nil, completion: { (metadata, err) in 
       if err == nil { 
        let path = metadata?.downloadURL()?.absoluteString 
        let values = ["name": withName, "email": email, "profilePicLink": path!] 
        Database.database().reference().child("users").child(userType).child((user?.uid)!).child("credentials").updateChildValues(values, withCompletionBlock: { (errr, _) in 
         if errr == nil { 
          let userInfo = ["email" : email, "password" : password, "type" : userType] 
          UserDefaults.standard.set(userInfo, forKey: "userInformation") 
          completion(true) 
         } 
        }) 
       } 
      }) 
     } 
     else { 
      completion(false) 
     } 
    }) 

在這裏,我主叫用戶對象的方法:

User.registerUser(withName: self.registerNameField.text!, email: self.registerEmailField.text!, password: self.registerPasswordField.text!, profilePic: self.profilePicView.image!, forUserType: UserType.psychologist) { [weak weakSelf = self] (status) in 
     DispatchQueue.main.async { 
      weakSelf?.showLoading(state: false) 
      for item in self.inputFields { 
       item.text = "" 
      } 
      if status == true { 
       weakSelf?.pushTomainView() 
       weakSelf?.profilePicView.image = UIImage.init(named: "profile pic") 
      } else { 
       for item in (weakSelf?.waringLabels)! { 
        item.isHidden = false 
       } 
      } 
     } 
    } 
+0

嗨。 AuthProvider.Instance.signUp和Auth.auth()。createUser之間的區別是什麼? – Mike

0
var abcd: String? 
if abcd != "" { 
    print("hello") 
} 

上述代碼打印hello在控制檯中。代碼中出現類似的問題。條件abcd != ""只測試爲空,而不是零。您應該首先打開所有文本字段文本,然後檢查isEmpty,並創建帳戶。

@IBAction func signUp(_ sender: AnyObject) { 
    guard let email = emailTextField.text, 
     let password = passwordTextField.text, 
     let confirmPassword = confirmPasswordTextField.text, 
     email != "", 
     password != "", 
     confirmPassword != "" else { 
      alertTheUser(title: "Email and password are required.", message: "Please enter email and password in the text fields.") 
    } 

    AuthProvider.Instance.signUp(withEmail: email, password: password, loginHandler: { (message) in 
     if message != nil { 
      self.alertTheUser(title: "Problem with creating a new user.", message: message!) 
     } else { 
      GroomrHandler.Instance.rider = email 
      self.saveUserInfo(email: email, password: password) 
      self.emailTextField.text = "" 
      self.passwordTextField.text = "" 
      self.confirmPasswordTextField.text = "" 
      //self.performSegue(withIdentifier: self.RIDER_SEGUE, sender: nil) 
      // save password to keychain 
     } 

    }) 
} 
相關問題