एकाधिक प्रामाणिक प्रदाताओं को एक खाते से लिंक करें

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

शुरू करने से पहले

अपने ऐप में दो या अधिक प्रमाणीकरण प्रदाताओं (संभवतः अनाम प्रमाणीकरण सहित) के लिए समर्थन जोड़ें।

प्रमाणीकरण प्रदाता क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करने के लिए:

  1. किसी भी प्रमाणीकरण प्रदाता या विधि का उपयोग करके उपयोगकर्ता में साइन इन करें।

  2. नए प्रमाणीकरण प्रदाता के लिए साइन-इन प्रवाह को पूरा करें, लेकिन इसमें signInWith - विधियों में से किसी एक को कॉल करना शामिल नहीं है। उदाहरण के लिए, उपयोगकर्ता का Google ID टोकन, Facebook एक्सेस टोकन, या ईमेल और पासवर्ड प्राप्त करें।

  3. नए प्रमाणीकरण प्रदाता के लिए एक Credential ऑब्जेक्ट प्राप्त करें:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  4. Credential ऑब्जेक्ट को साइन-इन उपयोगकर्ता की linkWithCredential() विधि में पास करें:

    try {
      final userCredential = await FirebaseAuth.instance.currentUser
          ?.linkWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case "provider-already-linked":
          print("The provider has already been linked to the user.");
          break;
        case "invalid-credential":
          print("The provider's credential is not valid.");
          break;
        case "credential-already-in-use":
          print("The account corresponding to the credential already exists, "
              "or is already linked to a Firebase User.");
          break;
        // See the API reference for the full list of error codes.
        default:
          print("Unknown error.");
      }
      ```
    

यदि linkWithCredential() पर कॉल सफल हो जाती है, तो उपयोगकर्ता अब किसी भी लिंक किए गए प्रमाणीकरण प्रदाता का उपयोग करके साइन इन कर सकता है और उसी फायरबेस डेटा तक पहुंच सकता है।

आप किसी प्रमाणीकरण प्रदाता को किसी खाते से अनलिंक कर सकते हैं, ताकि उपयोगकर्ता अब उस प्रदाता के साथ साइन इन न कर सके।

किसी उपयोगकर्ता खाते से प्रमाणीकरण प्रदाता को अनलिंक करने के लिए, प्रदाता आईडी को unlink() विधि में पास करें। आप User ऑब्जेक्ट के प्रदाता providerData प्रॉपर्टी से किसी उपयोगकर्ता से जुड़े प्रामाणिक प्रदाताओं की प्रदाता आईडी प्राप्त कर सकते हैं।

try {
  await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
  switch (e.code) {
    case "no-such-provider":
      print("The user isn't linked to the provider or the provider "
          "doesn't exist.");
      break;
    default:
      print("Unknown error.");
  }
}