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

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

नया उपयोगकर्ता बनाने के लिए, आपके पास ये विकल्प हैं:

  • अपने ऐप्लिकेशन से: createUserWithEmailAndPassword() तरीके को कॉल करके या फ़ेडरेटेड आइडेंटिटी प्रोवाइडर का इस्तेमाल करके, पहली बार किसी उपयोगकर्ता को साइन इन कराकर, अपने Firebase प्रोजेक्ट में नया उपयोगकर्ता बनाएं, जैसे कि Google साइन-इन, Facebook Login या Apple.

  • 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, यह तय किया जा सकता है कि कौनसा ईमेल टेंप्लेट इस्तेमाल किया जाए. ज़्यादा जानकारी के लिए, Firebase के सहायता केंद्र में ईमेल टेंप्लेट लेख पढ़ें.

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

इसके अलावा, ईमेल भेजने से पहले, 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 ज़्यादा जानकारी के लिए, Firebase के सहायता केंद्र में ईमेल टेंप्लेट लेख पढ़ें.

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

इसके अलावा, ईमेल भेजने से पहले, 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