Firebase में उपयोगकर्ताओं को मैनेज करें

उपयोगकर्ता बनाना

Firebase प्रोजेक्ट में नया उपयोगकर्ता चार तरीकों से बनाया जा सकता है:

उपयोगकर्ता पेज पर, Firebase कंसोल के पुष्टि करने वाले सेक्शन से भी, पासवर्ड से पुष्टि करने वाले नए उपयोगकर्ता बनाए जा सकते हैं.

किसी उपयोगकर्ता की प्रोफ़ाइल पाना

किसी उपयोगकर्ता की प्रोफ़ाइल की जानकारी पाने के लिए, User की प्रॉपर्टी इस्तेमाल करें. मौजूदा उपयोगकर्ता को दिखाने वाले User ऑब्जेक्ट को पाने के तीन तरीके हैं:

  • authStateChanges, idTokenChanges, और userChanges स्ट्रीम: आपके श्रोताओं को मौजूदा User मिलेगा. अगर किसी उपयोगकर्ता की पुष्टि नहीं हुई है, तो उन्हें null मिलेगा:

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

    जब ऐप्लिकेशन शुरू होता है, तो लोकल स्टोरेज से उपयोगकर्ता के क्रेडेंशियल (अगर कोई हो) वापस लाने के बाद एक इवेंट ट्रिगर होता है. इसका मतलब है कि जब उपयोगकर्ता की स्थिति शुरू होती है, तो आपके लिसनर हमेशा कॉल किए जाते हैं. इसके बाद, जब भी पुष्टि करने की स्थिति में बदलाव होगा, तब अपडेट की गई उपयोगकर्ता की स्थिति के साथ एक नया इवेंट जनरेट होगा.

    पुष्टि की स्थिति को सुनकर, ऐसा यूज़र इंटरफ़ेस बनाया जा सकता है जो पुष्टि की स्थिति में होने वाले बदलावों पर प्रतिक्रिया देता है. authStateChanges().listen(...) को सीधे तौर पर किसी विजेट के बिल्ड तरीके में न रखें, क्योंकि इससे हर बार फिर से बनाने पर नई सदस्यता बन जाएगी. अगर आपको पुष्टि की स्थिति के हिसाब से यूज़र इंटरफ़ेस (यूआई) को अपडेट करना है, तो StreamBuilder का इस्तेमाल करें:

    StreamBuilder<User?>(
    stream: FirebaseAuth.instance.authStateChanges(),
    builder: (BuildContext context, AsyncSnapshot<User?> snapshot) {
      if (snapshot.hasError) {
        return const Text('Something went wrong');
      }
    
      if (snapshot.connectionState == ConnectionState.waiting) {
        return const Text("Loading...");
      }
    
      if (!snapshot.hasData) {
        return const SignInScreen();
      }
    
      final user = snapshot.data!;
      return HomeScreen(userId: user.uid);
    },
    )
    

    इस तरीके से, यह पक्का किया जाता है कि उपयोगकर्ता की पुष्टि करने की स्थिति में बदलाव होने पर, विजेट ट्री अपने-आप फिर से बन जाए.

  • पुष्टि करने वाले signIn- तरीकों से मिला UserCredential ऑब्जेक्ट: UserCredential ऑब्जेक्ट में user प्रॉपर्टी होती है, जिसमें मौजूदा User होता है:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • FirebaseAuth इंस्टेंस की currentUser प्रॉपर्टी: अगर आपको पक्का पता है कि उपयोगकर्ता ने अभी साइन-इन किया है, तो currentUser प्रॉपर्टी से User को ऐक्सेस किया जा सकता है:

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    currentUser को null के तौर पर मार्क किया जा सकता है. इसकी दो वजहें हो सकती हैं:

    • उपयोगकर्ता ने साइन इन नहीं किया है.
    • ऑथ ऑब्जेक्ट का इनिशियलाइज़ेशन पूरा नहीं हुआ है. अगर उपयोगकर्ता के साइन-इन स्टेटस को ट्रैक करने के लिए किसी लिसनर का इस्तेमाल किया जाता है, तो आपको इस मामले को मैनेज करने की ज़रूरत नहीं है.

किसी उपयोगकर्ता की, सेवा देने वाली कंपनी के हिसाब से प्रोफ़ाइल की जानकारी पाना

किसी उपयोगकर्ता से लिंक किए गए साइन-इन की सुविधा देने वाली कंपनियों से मिली प्रोफ़ाइल की जानकारी पाने के लिए, providerData प्रॉपर्टी का इस्तेमाल करें. उदाहरण के लिए:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

किसी उपयोगकर्ता की प्रोफ़ाइल अपडेट करना

update- तरीकों का इस्तेमाल करके, किसी उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी अपडेट की जा सकती है. जैसे, उपयोगकर्ता का डिसप्ले नेम और प्रोफ़ाइल फ़ोटो का यूआरएल. उदाहरण के लिए:

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

किसी उपयोगकर्ता का ईमेल पता सेट करना

updateEmail() तरीके का इस्तेमाल करके, किसी उपयोगकर्ता का ईमेल पता सेट किया जा सकता है. उदाहरण के लिए:

await user?.updateEmail("janeq@example.com");

किसी उपयोगकर्ता को पुष्टि करने के लिए ईमेल भेजना

sendEmailVerification() तरीके का इस्तेमाल करके, किसी उपयोगकर्ता को पते की पुष्टि करने वाला ईमेल भेजा जा सकता है. उदाहरण के लिए:

await user?.sendEmailVerification();

Firebase कंसोल के पुष्टि करने वाले सेक्शन में इस्तेमाल किए जाने वाले ईमेल टेंप्लेट को, ईमेल टेंप्लेट पेज पर जाकर पसंद के मुताबिक बनाया जा सकता है. Firebase सहायता केंद्र में ईमेल टेंप्लेट देखें.

पुष्टि करने वाला ईमेल भेजते समय, जारी रखने के यूआरएल के ज़रिए भी स्थिति को पास किया जा सकता है, ताकि उपयोगकर्ता को वापस ऐप्लिकेशन पर रीडायरेक्ट किया जा सके.

इसके अलावा, ईमेल भेजने से पहले Auth इंस्टेंस पर भाषा कोड अपडेट करके, पुष्टि करने वाले ईमेल को स्थानीय भाषा में भेजा जा सकता है. उदाहरण के लिए:

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

किसी उपयोगकर्ता का पासवर्ड सेट करना

updatePassword() तरीके का इस्तेमाल करके, किसी उपयोगकर्ता का पासवर्ड सेट किया जा सकता है. उदाहरण के लिए:

await user?.updatePassword(newPassword);

पासवर्ड रीसेट करने का ईमेल भेजना

sendPasswordResetEmail() तरीके का इस्तेमाल करके, किसी उपयोगकर्ता को पासवर्ड रीसेट करने का ईमेल भेजा जा सकता है. उदाहरण के लिए:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

Firebase कंसोल के पुष्टि करने वाले सेक्शन में इस्तेमाल किए जाने वाले ईमेल टेंप्लेट को, ईमेल टेंप्लेट पेज पर जाकर पसंद के मुताबिक बनाया जा सकता है. Firebase सहायता केंद्र में ईमेल टेंप्लेट देखें.

पासवर्ड रीसेट करने का ईमेल भेजते समय, ऐप्लिकेशन पर वापस रीडायरेक्ट करने के लिए, जारी रखने के यूआरएल के ज़रिए भी स्थिति को पास किया जा सकता है.

इसके अलावा, ईमेल भेजने से पहले Auth इंस्टेंस पर भाषा कोड अपडेट करके, पासवर्ड रीसेट करने वाले ईमेल को स्थानीय भाषा में बदला जा सकता है. उदाहरण के लिए:

await FirebaseAuth.instance.setLanguageCode("fr");

Firebase कंसोल से भी, पासवर्ड रीसेट करने के ईमेल भेजे जा सकते हैं.

किसी उपयोगकर्ता को मिटाना

delete() तरीके का इस्तेमाल करके, किसी उपयोगकर्ता खाते को मिटाया जा सकता है. उदाहरण के लिए:

await user?.delete();

उपयोगकर्ताओं को Firebase कंसोल के पुष्टि करने वाले सेक्शन से भी मिटाया जा सकता है. इसके लिए, उपयोगकर्ताओं के पेज पर जाएं.

किसी उपयोगकर्ता की फिर से पुष्टि करना

सुरक्षा से जुड़ी कुछ संवेदनशील कार्रवाइयों के लिए, यह ज़रूरी है कि उपयोगकर्ता ने हाल ही में साइन इन किया हो. जैसे, खाता मिटाना, मुख्य ईमेल पता सेट करना, और पासवर्ड बदलना. अगर इनमें से कोई कार्रवाई की जाती है और उपयोगकर्ता ने बहुत पहले साइन इन किया था, तो कार्रवाई पूरी नहीं होगी. साथ ही, FirebaseAuthException कोड requires-recent-login के साथ दिखेगा. ऐसा होने पर, उपयोगकर्ता से साइन इन करने के नए क्रेडेंशियल लेकर उसकी फिर से पुष्टि करें. इसके बाद, उन क्रेडेंशियल को reauthenticate को भेजें. उदाहरण के लिए:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

उपयोगकर्ता खातों को इंपोर्ट करना

Firebase CLI की auth:import कमांड का इस्तेमाल करके, किसी फ़ाइल से उपयोगकर्ता खातों को अपने Firebase प्रोजेक्ट में इंपोर्ट किया जा सकता है. उदाहरण के लिए:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14