2016-06-26 27 views
13

मैं एंड्रॉइड पर Firebase और Firebase Auth फ़ंक्शंस का उपयोग करता हूं।एंड्रॉइड पर फायरबेस: फायरबेस एथ को कैसे जांचें विफल कारण?

मैं FirebaseAuth.signInWithEmailAndPassword आज़माता हूं और यदि यह विफल रहता है तो मैं जानना चाहता हूं कि "साइनइन प्रक्रिया क्यों विफल हुई?"

signInWithEmailAndPassword विधि addOnFailureListener API है। और मैं (शायद FirebaseAuthException) onFailure कॉलबैक विधि में पकड़ सकता हूं।

auth.signInWithEmailAndPassword(loginRequest.id, loginRequest.password) 
    .addOnFailureListener(new OnFailureListener() { 
    @Override 
    public void onFailure(@NonNull Exception e) { 
     if (e instanceof FirebaseAuthException) { 
     ((FirebaseAuthException) e).getErrorCode()); 
     } 
    } 
    }); 

मैं जानना चाहता हूं कि साइनइन प्रक्रिया क्यों विफल रही। onFailure में।

मुझे लगता है कि इस प्रकार के रूप में यह किया जा सकता है:

  1. e उदाहरण प्रकार की जांच (ङ instanceof FirebaseAuthInvalidUserException या FirebaseAuthInvalidCredentialsException या ,,,)
  2. e.getErrorCode()

मैं टाइप करने के लिए नहीं करना चाहते हैं चेक (यह गंदा है)।
मैं पसंद 2 में पसंद पसंद करते हैं। लेकिन मुझे e.getErrorCode() वापसी मूल्य संग्रह की परिभाषा नहीं मिली। , उदा, ERROR_INVALID_EMAIL, ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL, आदि (वे कहाँ परिभाषित कर रहे हैं?)

कृपया मुझे बताओ जो Firebase auth failed के लिए कारण की जाँच करने के लिए सबसे अच्छा तरीका है।

धन्यवाद।

उत्तर

7

मुझे एक ही संदेह था और मुझे उनके दस्तावेज़ों पर थोड़ी अधिक जानकारी मिली।

अपवाद::

उदाहरण के लिए में आप इस विधि का उपयोग कर रहे हैं createUserWithEmailAndPassword आप अपने documentation page निम्नलिखित अपवादों पर देख सकते हैं

FirebaseAuthWeakPasswordException फेंका ईमेल अगर फेंक दिया FirebaseAuthInvalidCredentialsException अगर पासवर्ड पर्याप्त मजबूत नहीं है पता खराब है FirebaseAuthUserCollisionException फेंक दिया गया है यदि दिए गए ईमेल पते के साथ पहले से मौजूद खाता है

प्रत्येक अपवाद के लिए वहाँ भी एक प्रलेखन पेज, उदाहरण के लिए FirebaseAuthUserCollisionException

के लिए एक है और यहाँ आप अलग त्रुटि प्रकार देख सकते हैं:

ERROR_EMAIL_ALREADY_IN_USE जब createUserWithEmailAndPassword (स्ट्रिंग, स्ट्रिंग के साथ एक नया खाता बनाने का प्रयास) या किसी उपयोगकर्ता के ईमेल पते को बदलने के लिए, यदि ईमेल पहले से ही किसी भिन्न खाते ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL द्वारा उपयोग में है, तो एक ऐसे खाते के साथ साइनइनविथ क्रेडेंशियल (एथ क्रेडेंशियल) को कॉल करते समय, जो किसी अन्य खाते द्वारा उपयोग में ईमेल पते का दावा करता है। यह त्रुटि केवल तभी फेंक दी जाएगी जब फ़ायरबेस कंसोल (अनुशंसित) में "एक खाता प्रति ईमेल पता" सेटिंग सक्षम हो। ERROR_CREDENTIAL_ALREADY_IN_USE जब एक AuthCredential पहले से ही उपयोग

में किसी अन्य खाते के लिए इसी तो अगर आप एक getErrorCode() करते हैं और इन स्थिरांक की किसी के साथ स्ट्रिंग तुलना कि वास्तव में आप अपवाद का कारण पता चल जाएगा के साथ एक उपयोगकर्ता से जोड़ने के लिए कोशिश कर रहा।

उम्मीद है कि यह मदद करता है।

7

मुझे फायरबेस पुस्तकालय के अंदर कुछ कोड मिले जो विफलता संदेशों के समान हैं। लेकिन अभी तक कोशिश की है। आप इसे आज़मा सकते हैं।

("ERROR_INVALID_CUSTOM_TOKEN", "The custom token format is incorrect. Please check the documentation.")); 
    ("ERROR_CUSTOM_TOKEN_MISMATCH", "The custom token corresponds to a different audience.")); 
    ("ERROR_INVALID_CREDENTIAL", "The supplied auth credential is malformed or has expired.")); 
    ("ERROR_INVALID_EMAIL", "The email address is badly formatted.")); 
    ("ERROR_WRONG_PASSWORD", "The password is invalid or the user does not have a password.")); 
    ("ERROR_USER_MISMATCH", "The supplied credentials do not correspond to the previously signed in user.")); 
    ("ERROR_REQUIRES_RECENT_LOGIN", "This operation is sensitive and requires recent authentication. Log in again before retrying this request.")); 
    ("ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL", "An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address.")); 
    ("ERROR_EMAIL_ALREADY_IN_USE", "The email address is already in use by another account.")); 
    ("ERROR_CREDENTIAL_ALREADY_IN_USE", "This credential is already associated with a different user account.")); 
    ("ERROR_USER_DISABLED", "The user account has been disabled by an administrator.")); 
    ("ERROR_USER_TOKEN_EXPIRED", "The user\'s credential is no longer valid. The user must sign in again.")); 
    ("ERROR_USER_NOT_FOUND", "There is no user record corresponding to this identifier. The user may have been deleted.")); 
    ("ERROR_INVALID_USER_TOKEN", "The user\'s credential is no longer valid. The user must sign in again.")); 
    ("ERROR_OPERATION_NOT_ALLOWED", "This operation is not allowed. You must enable this service in the console.")); 
    ("ERROR_WEAK_PASSWORD", "The given password is invalid.")); 
+0

क्या उन त्रुटि कोडों के लिए कोई सार्वजनिक स्थिर स्ट्रिंग स्थिरांक उपलब्ध है? (उदाहरण के लिए FirebaseAuthUserCollisionException.ERROR_EMAIL_ALREADY_IN_USE) – shaunkawano

+0

मुझे ऐसा नहीं लगता है। उचित कार्यान्वयन @ लांसलोट के जवाब में है। और आपका पहला विकल्प। प्रत्येक अपवाद को अलग-अलग संभालने के लिए यह गंदे और बेहतर नहीं है। यहां तक ​​कि यदि आप दूसरा चुनते हैं तो आप प्रत्येक मामले को संभालने वाले हैं। यह कोड की एक ही राशि लगता है। – uguboz

+0

आपकी जानकारी के लिए धन्यवाद, हालांकि मुझे लगता है कि स्ट्रिंग निरंतर मूल्य घोषित करना आपके द्वारा टाइपिंग स्ट्रिंग मान की तुलना में अधिक सुरक्षित और आसान है, क्योंकि ऑटो पूर्ण होने पर आपके पूर्ण समय को बचाया जाएगा, और यदि आपको लिखने की आवश्यकता है तो गलत टाइपिंग हो सकती है अपने आप से तार। – shaunkawano

1

एक बार सफलतापूर्वक ईमेल + पासवर्ड ऑथ विधि सक्षम करने के बाद आपको अपने फायरबेस परियोजना के लिए एक एप्लिकेशन बनाने की आवश्यकता होगी।

पर जाएं: अवलोकन -> एक और ऐप जोड़ें -> अपनी आवश्यकताओं के अनुसार अगले चरणों का पालन करें।

आशा है कि यह सभी की मदद करेगा। चीयर्स!

संबंधित मुद्दे