C++ का इस्तेमाल करके, पासवर्ड पर आधारित खातों का इस्तेमाल करके Firebase से पुष्टि करें

Firebase से पुष्टि करने की सुविधा का इस्तेमाल करके, अपने उपयोगकर्ताओं को उनके ईमेल पते और पासवर्ड का इस्तेमाल करके Firebase की पुष्टि करने की अनुमति दी जा सकती है. साथ ही, इससे ऐप्लिकेशन के पासवर्ड पर आधारित खातों को मैनेज किया जा सकता है.

वेब कंटेनर इंस्टॉल करने से पहले

  1. अपने C++ प्रोजेक्ट में Firebase जोड़ें.
  2. अगर आपने अभी तक अपने ऐप्लिकेशन को Firebase प्रोजेक्ट से कनेक्ट नहीं किया है, तो Firebase कंसोल से ऐसा करें.
  3. ईमेल/पासवर्ड से साइन-इन करने की सुविधा चालू करें:
    1. Firebase कंसोल में, पुष्टि करें सेक्शन खोलें.
    2. साइन इन करने का तरीका टैब पर, साइन इन करने का ईमेल/पासवर्ड तरीका चालू करें और सेव करें पर क्लिक करें.

firebase::auth::Auth क्लास को ऐक्सेस करें

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);
    

पासवर्ड पर आधारित खाता बनाना

पासवर्ड वाला नया उपयोगकर्ता खाता बनाने के लिए, अपने ऐप्लिकेशन के साइन-इन कोड में इन चरणों को पूरा करें:

  1. जब कोई नया उपयोगकर्ता आपके ऐप्लिकेशन के साइन-अप फ़ॉर्म का इस्तेमाल करके साइन अप करता है, तो अपने ऐप्लिकेशन के लिए खाते की पुष्टि करने के सभी नए चरण पूरे करें. जैसे, यह पुष्टि करना कि नए खाते का पासवर्ड सही तरीके से लिखा गया है और वह पासवर्ड के लिए बनी आपकी ज़रूरी शर्तों के मुताबिक है.
  2. नए उपयोगकर्ता का ईमेल पता और पासवर्ड Auth::CreateUserWithEmailAndPassword को भेजकर एक नया खाता बनाएं:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->CreateUserWithEmailAndPassword(email, password);
    
  3. अगर आपके प्रोग्राम में अपडेट लूप है, जो नियमित तौर पर चलता है (जैसे, एक सेकंड में 30 या 60 बार), तो हर अपडेट के लिए एक बार नतीजे देखने के लिए Auth::CreateUserWithEmailAndPasswordLastResult की मदद लें:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->CreateUserWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        const firebase::auth::AuthResult auth_result = *result.result();
        printf("Create user succeeded for email %s\n",
               auth_result.user.email().c_str());
      } else {
        printf("Created user failed with error '%s'\n", result.error_message());
      }
    }
    
    इसके अलावा, अगर आपका प्रोग्राम इवेंट पर आधारित है, तो आने वाले समय में कॉलबैक रजिस्टर किया जा सकता है.

ईमेल पते और पासवर्ड वाले उपयोगकर्ता खाते में साइन इन करें

पासवर्ड से उपयोगकर्ता में साइन इन करने के चरण, नया खाता बनाने के चरणों जैसे ही हैं. अपने ऐप्लिकेशन के साइन-इन फ़ंक्शन में, ये काम करें:

  1. जब कोई उपयोगकर्ता आपके ऐप्लिकेशन में साइन इन करता है, तो उपयोगकर्ता के ईमेल पते और पासवर्ड को firebase::auth::Auth::SignInWithEmailAndPassword को दें:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithEmailAndPassword(email, password);
    
  2. अगर आपके प्रोग्राम में अपडेट लूप है, जो नियमित तौर पर चलता है (जैसे, एक सेकंड में 30 या 60 बार), तो हर अपडेट के लिए एक बार नतीजे देखने के लिए Auth::SignInWithEmailAndPasswordLastResult की मदद लें:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        const firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for email %s\n",
               auth_result.user.email().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    इसके अलावा, अगर आपका प्रोग्राम इवेंट पर आधारित है, तो आने वाले समय में कॉलबैक रजिस्टर किया जा सकता है.

फ़्यूचर के लिए कॉलबैक रजिस्टर करना

कुछ प्रोग्राम में Update फ़ंक्शन होते हैं, जिन्हें प्रति सेकंड 30 या 60 बार कॉल किया जाता है. उदाहरण के लिए, कई गेम इस मॉडल का पालन करते हैं. ये प्रोग्राम, एसिंक्रोनस कॉल को पोल करने के लिए, LastResult फ़ंक्शन को कॉल कर सकते हैं. हालांकि, अगर आपका प्रोग्राम इवेंट के आधार पर तय होता है, तो आपके पास कॉलबैक फ़ंक्शन को रजिस्टर करने का विकल्प होता है. फ़्यूचर के पूरा होने पर कॉलबैक फ़ंक्शन को कॉल किया जाता है.
void OnCreateCallback(const firebase::Future<firebase::auth::User*>& result,
                      void* user_data) {
  // The callback is called when the Future enters the `complete` state.
  assert(result.status() == firebase::kFutureStatusComplete);

  // Use `user_data` to pass-in program context, if you like.
  MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data);

  // Important to handle both success and failure situations.
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::User* user = *result.result();
    printf("Create user succeeded for email %s\n", user->email().c_str());

    // Perform other actions on User, if you like.
    firebase::auth::User::UserProfile profile;
    profile.display_name = program_context->display_name;
    user->UpdateUserProfile(profile);

  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

void CreateUser(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::AuthResult> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // `&my_program_context` is passed verbatim to OnCreateCallback().
  result.OnCompletion(OnCreateCallback, &my_program_context);
}
अगर आप चाहें, तो कॉलबैक फ़ंक्शन को लैम्डा भी किया जा सकता है.
void CreateUserUsingLambda(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::AuthResult> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // The lambda has the same signature as the callback function.
  result.OnCompletion(
      [](const firebase::Future<firebase::auth::User*>& result,
         void* user_data) {
        // `user_data` is the same as &my_program_context, below.
        // Note that we can't capture this value in the [] because std::function
        // is not supported by our minimum compiler spec (which is pre C++11).
        MyProgramContext* program_context =
            static_cast<MyProgramContext*>(user_data);

        // Process create user result...
        (void)program_context;
      },
      &my_program_context);
}

सुझाया गया: ईमेल गिनती सुरक्षा चालू करें

Firebase से पुष्टि करने के कुछ तरीके, ईमेल पतों को पैरामीटर के तौर पर लेते हैं. अगर किसी ईमेल पते को रजिस्टर नहीं किया गया है (उदाहरण के लिए, ईमेल पते और पासवर्ड से साइन इन करते समय) या इस्तेमाल न होने पर (उदाहरण के लिए, उपयोगकर्ता का ईमेल पता बदलते समय) तब रजिस्टर किया जाता है, जब उसे पैरामीटर के तौर पर इस्तेमाल किया जाता है. यह लोगों को खास तरीकों का सुझाव देने में मददगार हो सकता है. हालांकि, नुकसान पहुंचाने वाले लोग या ग्रुप आपके उपयोगकर्ताओं के रजिस्टर किए गए ईमेल पते खोजकर भी इसका गलत इस्तेमाल कर सकते हैं.

इस जोखिम को कम करने के लिए, हमारा सुझाव है कि आप Google Cloud gcloud टूल का इस्तेमाल करके, अपने प्रोजेक्ट के लिए ईमेल की गिनती करने की सुरक्षा चालू करें. ध्यान दें कि इस सुविधा को चालू करने से, Firebase से पुष्टि करने की सुविधा में गड़बड़ी की शिकायत करने का तरीका बदल जाता है: पक्का करें कि आपका ऐप्लिकेशन ज़्यादा खास गड़बड़ियों पर निर्भर न रहें.

अगले चरण

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

  • अपने ऐप्लिकेशन में, 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();
    }
    
  • अपने Firebase रीयल टाइम डेटाबेस और Cloud Storage के सुरक्षा नियमों में, auth वैरिएबल से साइन-इन किए हुए उपयोगकर्ता का यूनीक यूज़र आईडी पाया जा सकता है और उसका इस्तेमाल करके यह कंट्रोल किया जा सकता है कि उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.

आप पुष्टि करने वाली सेवा देने वाली कंपनियों के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करके, उपयोगकर्ताओं को अपने ऐप्लिकेशन में साइन इन करने की अनुमति दे सकते हैं.

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

auth->SignOut();