2016-06-03 25 views
8

... "ईमेल पते से एक ही खाता" यदि आप एक ही ईमेल पते के साथ एक से अधिक खातों की अनुमति नहीं है, यदि कोई उपयोगकर्ता एक नया खाता नहीं बना सकते कि के साथ एक Google खाते का उपयोग में संकेत ईमेल पता [email protected] अगर पहले से ही खाता है जो ईमेल पते [email protected] और पासवर्ड का उपयोग करने में साइन इन करता है।FirebaseAuthInvalidCredentialsException का उपयोग करते समय

जिस डाक कि पहले से ही ईमेल प्रदाता के माध्यम से दर्ज किया गया था के लिए गूगल प्रदाता के साथ प्रवेश करने में सक्षम था, तो गूगल प्रदाता ईमेल प्रदाता बदल दिया और बाद तो FirebaseAuthInvalidCredentialsException साथ साइन-इन करने में विफल रहता: पासवर्ड अमान्य या है उपयोगकर्ता के पास पासवर्ड नहीं है।

कदम पुन: पेश करने:

साइन अप करें ईमेल प्रदाता के साथ -> प्रस्थान करें -> गूगल प्रदाता के साथ साइन इन -> बाहर

असल में साइन इसे एक प्रदाता को दूसरे के साथ बदलने की अनुमति नहीं देनी चाहिए और फायरबेस एथयूसर कॉलिज़न फेंकना नहीं चाहिए अपवाद: ईमेल पता पहले से ही किसी अन्य खाते द्वारा उपयोग में है।

कुछ कोड है कि मैं/साइन इन के लिए उपयोग से साइन आउट:

public void signUpEmail(String email, String password) { 
    mFirebaseAuth.createUserWithEmailAndPassword(email, password) 
     .addOnCompleteListener(this, task -> { 
      if (!task.isSuccessful()) { 
      Log.e("signUpWithEmail", task.getException()); 
      } 
     }); 
    } 

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
    mFirebaseAuth.signInWithCredential(credential) 
     .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override public void onComplete(@NonNull Task<AuthResult> task) { 
      if (!task.isSuccessful()) { 
      Log.e("signInWithCredential", task.getException()); 
      } 
     } 
    }); 
    } 

    public void signInEmail(String email, String password) { 
    mFirebaseAuth.signInWithEmailAndPassword(email, password) 
     .addOnCompleteListener(this, task -> { 
      if (!task.isSuccessful()) { 
      Log.e("signInWithEmail", task.getException()); 
      } 
     }); 
    } 

    public void signOut() { 
    Auth.GoogleSignInApi.signOut(mGoogleApiClient); 
    mFirebaseAuth.signOut(); 
    startSignInActivity(); 
    } 

धन्यवाद!

+1

शायद यहां कोड पर निर्भर करेगा। कुछ भी न्यूनतम, लेकिन पूरा, कि आप साझा कर सकते हैं? –

+0

कुछ कोड और स्पष्टीकरण जोड़े जोड़े गए। –

उत्तर

2

प्रति ईमेल पते के एकाधिक खाते एक ही ईमेल का उपयोग कर विभिन्न प्रदाताओं के लिए एक अलग यूआईडी के साथ एक नया उपयोगकर्ता बना देगा।

से बनाने के लिए: गूगल ईमेल x @ x

  • साइन के साथ में

    1. साइन इन करें फेसबुक ईमेल के साथ एक्स @ x
    2. बनाएं ईमेल पासवर्ड खाता एक्स @ x

    अब आप 3 अलग-अलग उपयोगकर्ता मिलेंगे।

    यदि आप प्रति ईमेल की दृढ़ता से अनुशंसित एकल खाते का उपयोग करते हैं, तो ऊपर दिए गए 3 प्रदाता एक ही उपयोगकर्ता (एक यूआईडी) के भीतर होंगे।

    जब आप पहली बार Google खाता x @ x बनाते हैं और ईमेल x @ x के साथ नए फेसबुक खाते से साइन इन करने का प्रयास करते हैं, तो आपको एक त्रुटि मिल जाएगी जो आगे बढ़ने के लिए आवश्यक है। इसके बाद आपको पहले Google उपयोगकर्ता में साइन इन करना होगा और नए फेसबुक उपयोगकर्ता को लिंक करना होगा।

  • +0

    धन्यवाद, बात यह है कि मुझे आवश्यक त्रुटि को जोड़ने के बजाय FirebaseAuthInvalidCredentialsException प्राप्त हो रहा था, इसलिए यह स्पष्ट नहीं था कि क्या गलत है –

    +0

    मैं देखता हूं, अब मैं आपका प्रश्न समझता हूं। मुझे प्रति ईमेल एक खाते में लगता है, इसका इरादा हो सकता है। जब आप एक अलग प्रदाता का उपयोग कर एक ही ईमेल के साथ साइन इन करते हैं तो आमतौर पर लिंकिंग ट्रिगर की जाएगी। हालांकि यह एक विशेष मामला है। चूंकि Google ईमेल सत्यापित हैं और इस मामले में ईमेल पासवर्ड प्रदाता नहीं हैं, इसलिए आप सीधे अपने ईमेल खाते से लिंक किए बिना साइन इन करेंगे। हालांकि, मैं जांच करूंगा कि पासवर्ड प्रदाता को हटाया जा रहा है या नहीं, इस उद्देश्य के व्यवहार का हिस्सा भी है। – bojeil

    3

    लॉगिन UI चरणों को अनुकूलित करने और खाता सुरक्षा बढ़ाने के लिए, फ़ायरबेस प्रमाणीकरण में 'विश्वसनीय प्रदाता' की अवधारणा है, जहां पहचान प्रदाता ईमेल सेवा प्रदाता भी है। उदाहरण के लिए, Google @ gmail.com पते के लिए विश्वसनीय प्रदाता है, याहू @ yahoo.com पते के लिए विश्वसनीय प्रदाता है, और माइक्रोसॉफ्ट @ outlook.com पते के लिए है।

    "प्रति खाता एक खाता" मोड में, फ़ायरबेस प्रमाणीकरण ईमेल पते के आधार पर खाते को लिंक करने का प्रयास करता है। यदि विश्वसनीय प्रदाता से उपयोगकर्ता लॉग इन करते हैं, तो उपयोगकर्ता तुरंत खाते में साइन इन करता है क्योंकि हम जानते हैं कि उपयोगकर्ता का ईमेल पता है।

    यदि एक ही ईमेल पते वाला कोई मौजूदा खाता है लेकिन अन्य प्रमाण-पत्रों (जैसे पासवर्ड या गैर-भरोसेमंद प्रदाता) के साथ बनाया गया है, तो पिछले कारणों को सुरक्षा कारणों से हटा दिया गया है।

    एक फिशर (जो ईमेल पता स्वामी नहीं है) प्रारंभिक खाता बना सकता है - प्रारंभिक प्रमाण पत्र को हटाने से फिशर खाते को बाद में पहुंचने से रोक देगा। कानूनी उपयोगकर्ता पासवर्ड रीसेट प्रवाह के माध्यम से पासवर्ड सेट कर सकता है, जहां उसे यह साबित करने की आवश्यकता होगी कि वह ईमेल पता का मालिक है।

    +0

    मेरा मानना ​​है कि यह बताता है कि क्यों Google साइन इन ईमेल पता प्रदाता प्रमाण-पत्रों को ओवरराइट करता है। –

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