कस्टम प्रमाणीकरण प्रणाली और C++ का उपयोग करके फायरबेस से प्रमाणित करें

जब उपयोगकर्ता सफलतापूर्वक साइन इन करता है तो कस्टम हस्ताक्षरित टोकन बनाने के लिए आप अपने प्रमाणीकरण सर्वर को संशोधित करके कस्टम प्रमाणीकरण प्रणाली के साथ फायरबेस प्रमाणीकरण को एकीकृत कर सकते हैं। आपका ऐप इस टोकन को प्राप्त करता है और फायरबेस के साथ प्रमाणित करने के लिए इसका उपयोग करता है।

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

  1. अपने C++ प्रोजेक्ट में Firebase जोड़ें
  2. अपने प्रोजेक्ट की सर्वर कुंजियाँ प्राप्त करें:
    1. अपने प्रोजेक्ट की सेटिंग में सर्विस अकाउंट पेज पर जाएं।
    2. सर्विस अकाउंट पेज के फायरबेस एडमिन एसडीके सेक्शन के नीचे नई निजी कुंजी जेनरेट करें पर क्लिक करें।
    3. नए सेवा खाते की सार्वजनिक/निजी कुंजी जोड़ी आपके कंप्यूटर पर स्वचालित रूप से सहेजी जाती है। इस फ़ाइल को अपने प्रमाणीकरण सर्वर पर कॉपी करें।

फायरबेस के साथ प्रमाणित करें

Auth क्लास सभी एपीआई कॉल के लिए गेटवे है।
  1. प्रामाणिक और ऐप हेडर फ़ाइलें जोड़ें:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. अपने इनिशियलाइज़ेशन कोड में, एक firebase::App क्लास बनाएं।
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. अपने firebase::App के लिए firebase::auth::Auth वर्ग प्राप्त करें। App और Auth के बीच वन-टू-वन मैपिंग है।
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
अपने प्रमाणीकरण सर्वर से टोकन के साथ Auth::SignInWithCustomToken पर कॉल करें।
  1. जब उपयोगकर्ता आपके ऐप में साइन इन करते हैं, तो अपने प्रमाणीकरण सर्वर पर उनके साइन-इन क्रेडेंशियल (उदाहरण के लिए, उनका उपयोगकर्ता नाम और पासवर्ड) भेजें। आपका सर्वर क्रेडेंशियल्स की जांच करता है और यदि वे मान्य हैं तो एक कस्टम टोकन देता है।
  2. अपने प्रमाणीकरण सर्वर से कस्टम टोकन प्राप्त करने के बाद, उपयोगकर्ता में साइन इन करने के लिए इसे Auth::SignInWithCustomToken पर पास करें:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. यदि आपके प्रोग्राम में एक अपडेट लूप है जो नियमित रूप से चलता है (जैसे प्रति सेकंड 30 या 60 बार), तो आप प्रति अपडेट एक बार परिणामों की जांच कर सकते हैं Auth::SignInWithCustomTokenLastResult :
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for `%s`\n",
               auth_result.user.display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    या, यदि आपका प्रोग्राम इवेंट संचालित है, तो आप पसंद कर सकते हैं Future पर कॉलबैक रजिस्टर करने के लिए।

अगले कदम

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

  • अपने ऐप्स में, आप उपयोगकर्ता की बुनियादी प्रोफ़ाइल जानकारी firebase::auth::User ऑब्जेक्ट से प्राप्त कर सकते हैं:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      std::string name = user.display_name();
      std::string email = user.email();
      std::string photo_url = user.photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user.uid();
    }
    
  • अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप auth चर से साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप प्रमाणीकरण प्रदाता क्रेडेंशियल्स को मौजूदा उपयोगकर्ता खाते से लिंक करके एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके उपयोगकर्ताओं को अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

किसी उपयोगकर्ता को साइन आउट करने के लिए, SignOut() पर कॉल करें:

auth->SignOut();