Firebase Authentication का इस्तेमाल करके, अपने उपयोगकर्ताओं को अपने ईमेल पते और पासवर्ड का इस्तेमाल करके, Firebase से पुष्टि करने की अनुमति दी जा सकती है. साथ ही, अपने ऐप्लिकेशन के पासवर्ड पर आधारित खातों को मैनेज किया जा सकता है.
शुरू करने से पहले
- अपने C++ प्रोजेक्ट में Firebase जोड़ें.
- अगर आपने अब तक अपने ऐप्लिकेशन को Firebase प्रोजेक्ट से कनेक्ट नहीं किया है, तो Firebase कंसोल से ऐसा करें.
- ईमेल/पासवर्ड से साइन इन करने की सुविधा चालू करना:
- Firebase कंसोल में, पुष्टि सेक्शन खोलें.
- साइन इन करने का तरीका टैब पर, साइन इन करने के लिए ईमेल/पासवर्ड का तरीका चालू करें और सेव करें पर क्लिक करें.
firebase::auth::Auth
क्लास को ऐक्सेस करना
Auth
क्लास, सभी एपीआई कॉल के लिए गेटवे है.
- पुष्टि करने वाली और ऐप्लिकेशन की हेडर फ़ाइलें जोड़ें:
#include "firebase/app.h" #include "firebase/auth.h"
- अपने शुरुआती कोड में, एक
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__)
- अपने
firebase::App
के लिएfirebase::auth::Auth
क्लास पाएं.App
औरAuth
के बीच वन-टू-वन मैपिंग है.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
पासवर्ड पर आधारित खाता बनाना
पासवर्ड वाला नया उपयोगकर्ता खाता बनाने के लिए, अपने ऐप्लिकेशन के साइन-इन कोड में इन चरणों को पूरा करें:
- जब कोई नया उपयोगकर्ता आपके ऐप्लिकेशन के साइन-अप फ़ॉर्म का इस्तेमाल करके साइन अप करता है, तो खाते की पुष्टि करने के लिए, ऐप्लिकेशन के लिए ज़रूरी सभी नए चरणों को पूरा करें. जैसे, यह पुष्टि करना कि नए खाते का पासवर्ड सही तरीके से टाइप किया गया है और वह आपकी तय की गई ज़रूरी शर्तों के मुताबिक है.
- नए उपयोगकर्ता का ईमेल पता और पासवर्ड
Auth::CreateUserWithEmailAndPassword
को भेजकर, नया खाता बनाएं:firebase::Future<firebase::auth::AuthResult> result = auth->CreateUserWithEmailAndPassword(email, password);
- अगर आपके प्रोग्राम में अपडेट लूप नियमित तौर पर चलता है (जैसे, हर सेकंड में 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()); } }
किसी उपयोगकर्ता को ईमेल पते और पासवर्ड से साइन इन कराना
पासवर्ड का इस्तेमाल करके किसी उपयोगकर्ता के तौर पर साइन इन करने का तरीका, नया खाता बनाने के तरीके से मिलता-जुलता है. अपने ऐप्लिकेशन के साइन-इन फ़ंक्शन में, यह तरीका अपनाएं:
- जब कोई उपयोगकर्ता आपके ऐप्लिकेशन में साइन इन करता है, तो उपयोगकर्ता के ईमेल पते और पासवर्ड को
firebase::auth::Auth::SignInWithEmailAndPassword
को भेजें:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithEmailAndPassword(email, password);
- अगर आपके प्रोग्राम में अपडेट लूप नियमित तौर पर चलता है (जैसे, हर सेकंड में 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 कंसोल के पुष्टि करने की सेटिंग वाले पेज पर पासवर्ड नीति टैब खोलें:
Firebase Authentication की पासवर्ड नीतियों के तहत, पासवर्ड की इन ज़रूरी शर्तों को पूरा किया जा सकता है:
लोअरकेस वर्ण डालना ज़रूरी है
अपरकेस वर्ण ज़रूरी है
अंक में लिखना ज़रूरी है
अक्षर और अंक के अलावा कोई दूसरा वर्ण होना चाहिए
नीचे दिए गए वर्ण, अक्षर और अंक के अलावा अन्य वर्णों की ज़रूरी शर्तें पूरी करते हैं:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~
पासवर्ड की कम से कम लंबाई (6 से 30 वर्णों के बीच होनी चाहिए; डिफ़ॉल्ट रूप से 6 वर्ण)
पासवर्ड की ज़्यादा से ज़्यादा लंबाई (ज़्यादा से ज़्यादा 4096 वर्ण)
पासवर्ड से जुड़ी नीति को लागू करने की सुविधा को दो मोड में चालू किया जा सकता है:
ज़रूरी है: साइन अप करने की कोशिशें तब तक फ़ेल हो जाती हैं, जब तक उपयोगकर्ता आपकी नीति का पालन करने वाले पासवर्ड को अपडेट नहीं करता.
सूचना दें: उपयोगकर्ताओं को नीतियों का पालन न करने वाले पासवर्ड से साइन अप करने की अनुमति है. इस मोड का इस्तेमाल करते समय, आपको यह जांच करनी चाहिए कि उपयोगकर्ता का पासवर्ड, क्लाइंट-साइड की नीति का पालन करता है या नहीं. साथ ही, अगर उपयोगकर्ता इस नीति का पालन नहीं करता है, तो आपको उसे अपना पासवर्ड अपडेट करने के लिए कहना चाहिए.
नए उपयोगकर्ताओं को हमेशा ऐसा पासवर्ड चुनना होता है जो आपकी नीति के मुताबिक हो.
अगर आपके पास सक्रिय उपयोगकर्ता हैं, तो हमारा सुझाव है कि जब तक आप उन उपयोगकर्ताओं का ऐक्सेस ब्लॉक नहीं करना चाहते जिनके पासवर्ड आपकी नीति का पालन नहीं करते, जब तक आप साइन इन करने पर ज़बरदस्ती अपग्रेड करने की सुविधा चालू न करें. इसके बजाय, सूचना मोड का इस्तेमाल करें. इससे उपयोगकर्ता अपने मौजूदा पासवर्ड से साइन इन कर सकते हैं. साथ ही, उन्हें उन ज़रूरी शर्तों के बारे में जानकारी मिलती है जो उनके पासवर्ड में मौजूद नहीं हैं.
सुझाया गया: ईमेल गिनती सुरक्षा चालू करें
Firebase Authentication के कुछ ऐसे तरीके हैं जिनमें ईमेल पतों को पैरामीटर के तौर पर इस्तेमाल किया जाता है. अगर ईमेल पता रजिस्टर नहीं है, जबकि उसे रजिस्टर करना ज़रूरी है (उदाहरण के लिए, ईमेल पते और पासवर्ड से साइन इन करते समय), या ईमेल पता रजिस्टर है, जबकि उसे इस्तेमाल नहीं किया जाना चाहिए (उदाहरण के लिए, उपयोगकर्ता का ईमेल पता बदलते समय), तो ये तरीके कुछ खास गड़बड़ियां दिखाते हैं. यह सुविधा, उपयोगकर्ताओं को समस्या हल करने के सुझाव देने में मददगार हो सकती है. हालांकि, इसका गलत इस्तेमाल भी किया जा सकता है. जैसे, आपके उपयोगकर्ताओं के रजिस्टर किए गए ईमेल पते का पता लगाने के लिए.
इस जोखिम को कम करने के लिए, हमारा सुझाव है कि आप Google Cloud gcloud
टूल का इस्तेमाल करके, अपने प्रोजेक्ट के लिए ईमेल की गिनती करने की सुरक्षा चालू करें. ध्यान दें कि इस सुविधा को चालू करने पर, Firebase Authentication की गड़बड़ी की शिकायत करने के तरीके में बदलाव होता है: पक्का करें कि आपका ऐप्लिकेशन, ज़्यादा खास गड़बड़ियों पर निर्भर न हो.
अगले चरण
जब कोई उपयोगकर्ता पहली बार साइन इन करता है, तो एक नया उपयोगकर्ता खाता बन जाता है. साथ ही, उस खाते को उन क्रेडेंशियल से लिंक कर दिया जाता है जिनका इस्तेमाल करके उपयोगकर्ता ने साइन इन किया था. जैसे, उपयोगकर्ता का नाम और पासवर्ड, फ़ोन नंबर या पुष्टि करने वाली सेवा की जानकारी. इस नए खाते को आपके 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 Realtime Database और Cloud Storage सुरक्षा नियमों में, आपके पास
auth
वैरिएबल से साइन इन किए गए उपयोगकर्ता का यूनीक यूज़र आईडी पाने का विकल्प है. साथ ही, इसका इस्तेमाल करके यह कंट्रोल किया जा सकता है कि उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.
पुष्टि करने वाली सेवा देने वाली कंपनी के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करके, उपयोगकर्ताओं को पुष्टि करने वाली कई कंपनियों का इस्तेमाल करके, आपके ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है.
किसी उपयोगकर्ता को साइन आउट करने के लिए,
SignOut()
को कॉल करें:
auth->SignOut();