2016-05-26 24 views
8

Tôi đang gặp sự cố khi tìm hiểu cách đọc FIRAuthErrorNameKey trong phiên bản Firebase mới. Sau đây là những gì tôi có cho đến nay, nhưng dòng "let errorCode = FIRAuthErrorNameKey" là không chính xác. Từ đọc Firebase documentation Tôi cũng đã thử truy cập mã lỗi từ userInfo, nhưng không thành công và không có ý tưởng.Đọc Lỗi xác thực Firebase Firebase (Firebase 3.x và Swift)

// Send request to Firebase to add user to register user 
FIRAuth.auth()?.createUserWithEmail(emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in 

     // Check for errors and respond to user accordingly. 
     if error != nil { 

      let errorCode = FIRAuthErrorNameKey 

      switch errorCode { 

      case "FIRAuthErrorCodeEmailAlreadyInUse": 

       // Add logic accordingly 

      case ...: 

       // Add logic accordingly 

      case default: 

       // Add logic accordingly 
      } 
     } 
}) 

Trả lời

25

Hãy thử điều này. Điều này làm việc cho tôi. Ngoài ra, sau khi dán vào dự án của bạn. Nếu bạn cần xem tất cả các mã số FIRAuthErrorCode. Di chuột qua .ErrorCodeInvalidEmail sau đó nhấn nút chuột trái của bạn và nó sẽ hiển thị phần còn lại.

Nếu bạn gặp bất kỳ sự cố nào, hãy cho tôi biết và bị bệnh cố gắng giúp bạn. Chúc may mắn!

 FIRAuth.auth()?.createUserWithEmail(email, password: password) { (user, error) in 

      if error != nil { 

       if let errCode = FIRAuthErrorCode(rawValue: error!._code) { 

        switch errCode { 
         case .ErrorCodeInvalidEmail: 
          print("invalid email") 
         case .ErrorCodeEmailAlreadyInUse: 
          print("in use") 
         default: 
          print("Create User Error: \(error!)") 
        } 
       } 

      } else { 
       print("all good... continue") 
      } 
     } 
+1

Làm việc như một sự quyến rũ! Cảm ơn sự giúp đỡ và suy nghĩ về cách tìm các mã lỗi. Rất tiếc, tôi không bao giờ có thể tìm hiểu cách sử dụng các mã lỗi Chuỗi trên trang Hướng dẫn Firebase (https://firebase.google.com/docs/auth/ios/errors), nhưng điều này không phải là mẹo! – Ben

+1

Firebase hiện đã xóa 'FIR' trước cuộc gọi của họ. Vì vậy, nó sẽ chỉ là 'AuthErrorCode' – theblindprophet

+2

Họ cũng dường như đã đổi tên các lỗi enums hơi. Nếu bạn gõ 'case .' thì bạn sẽ thấy tất cả chúng. – ffritz

1

Từ đoạn mã, có vẻ như bạn đang cố gắng sử dụng mã lỗi chứ không phải FIRAuthErrorNameKey trong công tắc của bạn. Trong trường hợp đó, những gì bạn muốn sử dụng là mã lỗi của đối tượng NSError được trả về trong hàm gọi lại. Sử dụng:

let errorCode = error.code 

Bằng cách này biến errorCode sẽ chứa mã lỗi được trả lại và bạn có thể tiến hành xử lý lỗi của mình.

+0

Cảm ơn ý tưởng để giúp tôi đi đúng hướng. Điều này về mặt kỹ thuật không làm việc với thiết lập của tôi ở trên vì .code trả về một int. Nó sẽ làm việc bằng cách làm việc lại mã của tôi để phù hợp với các mã lỗi. Tôi không thể tìm thấy những điều này trong hướng dẫn Firebase, nhưng nếu bạn làm theo cách tiếp cận được vạch ra bởi the_pantless_coder để xem tất cả các mã lỗi trong câu trả lời khác, bạn có thể nhận được mã lỗi int ở đó. Cảm ơn! – Ben

0

tôi không biết nếu điều này giúp nhưng bạn có thể làm điều này cũng:

let errcode = FIRAuthErrorCode(rawValue: error!._code) 
    if errcode == FIRAuthErrorCode.errorCodeRequiresRecentLogin{ 

      //do error handling here 

    } 
5

căn cứ hỏa lực đã thay đổi mã một chút, và nếu bạn là người mới đến căn cứ hỏa lực nó sẽ đưa bạn một chút thời gian làm cho mã của bạn hoạt động. Tôi đã dành gần 3 giờ để tìm hiểu chuyện gì đang diễn ra. Đây là cách có vẻ bây giờ:

Auth.auth().createUser(withEmail: email, password: password) { (user: User?, error) in 

     if error != nil { 
     // Handle the error (i.e notify the user of the error) 

      if let errCode = AuthErrorCode(rawValue: error!._code) { 

       switch errCode { 
       case .invalidEmail: 
        print("invalid email") 
       case .emailAlreadyInUse: 
        print("in use") 
       default: 
        print("Other error!") 
       } 

      } 
     } 
8

Không ai trong số những câu trả lời dường như là to-date lên, đây là những gì tôi đang làm trên 3.x Swift, FirebaseAuth 4.0.0

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

     if let error = error as NSError? { 

      guard let errorCode = AuthErrorCode(rawValue: error.code) else { 

       print("there was an error logging in but it could not be matched with a firebase code") 
       return 

      } 

      switch errorCode { 

      case .invalidEmail: 

       print("invalid email") 

       //... 
Các vấn đề liên quan