आप अपने उपयोगकर्ताओं को याहू जैसे OAuth प्रदाताओं का उपयोग करके अपने ऐप में वेब-आधारित जेनेरिक OAuth लॉगिन को एकीकृत करके Firebase SDK का उपयोग करके अपने उपयोगकर्ताओं को एंड टू एंड साइन-इन प्रवाह को पूरा करने दे सकते हैं। चूंकि इस प्रवाह के लिए फ़ोन-आधारित Firebase SDK के उपयोग की आवश्यकता होती है, यह केवल Android और Apple प्लेटफ़ॉर्म पर समर्थित है।
शुरू करने से पहले
- अपने C++ प्रोजेक्ट में Firebase जोड़ें ।
- फायरबेस कंसोल में, प्रामाणिक अनुभाग खोलें।
- साइन इन विधि टैब पर, Yahoo प्रदाता को सक्षम करें।
- उस प्रदाता के डेवलपर कंसोल से प्रदाता कॉन्फ़िगरेशन में क्लाइंट आईडी और क्लाइंट सीक्रेट जोड़ें:
Yahoo OAuth क्लाइंट को पंजीकृत करने के लिए, Yahoo के साथ वेब एप्लिकेशन पंजीकृत करने पर Yahoo डेवलपर दस्तावेज़ का पालन करें।
दो OpenID Connect API अनुमतियों का चयन करना सुनिश्चित करें:
profile
औरemail
।- इन प्रदाताओं के साथ ऐप्स पंजीकृत करते समय, अपने प्रोजेक्ट के लिए
*.firebaseapp.com
डोमेन को अपने ऐप के रीडायरेक्ट डोमेन के रूप में पंजीकृत करना सुनिश्चित करें।
- सहेजें क्लिक करें.
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);
Firebase SDK के साथ साइन-इन प्रवाह को प्रबंधित करें
फायरबेस एसडीके के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:
याहू के लिए उपयुक्त प्रदाता आईडी के साथ कॉन्फ़िगर किए गए
FederatedOAuthProviderData
का एक उदाहरण बनाएं।firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);
वैकल्पिक : अतिरिक्त कस्टम OAuth पैरामीटर निर्दिष्ट करें जिन्हें आप OAuth अनुरोध के साथ भेजना चाहते हैं।
// Prompt user to re-authenticate to Yahoo. provider_data.custom_parameters["prompt"] = "login"; // Localize to French. provider_data.custom_parameters["language"] = "fr";
Yahoo द्वारा समर्थित पैरामीटर के लिए, Yahoo OAuth दस्तावेज़ीकरण देखें। ध्यान दें कि आप
custom_parameters()
के साथ फायरबेस-आवश्यक पैरामीटर पास नहीं कर सकते हैं। ये पैरामीटर हैं client_id , redirect_uri , response_type , scope और State ।वैकल्पिक :
profile
औरemail
से परे अतिरिक्त OAuth 2.0 स्कोप निर्दिष्ट करें जिसका आप प्रमाणीकरण प्रदाता से अनुरोध करना चाहते हैं। यदि आपके एप्लिकेशन को Yahoo API से निजी उपयोगकर्ता डेटा तक पहुंच की आवश्यकता है, तो आपको Yahoo डेवलपर कंसोल में API अनुमतियों के अंतर्गत Yahoo API के लिए अनुमतियों का अनुरोध करने की आवश्यकता होगी। अनुरोधित OAuth स्कोप ऐप की API अनुमतियों में पूर्व-कॉन्फ़िगर किए गए स्कोप से सटीक रूप से मेल खाने चाहिए। उदाहरण के लिए, यदि उपयोगकर्ता संपर्कों को पढ़ने/लिखने की पहुंच का अनुरोध किया गया है और ऐप की एपीआई अनुमतियों में पूर्व-कॉन्फ़िगर किया गया है,sdct-w
को केवल पढ़ने के लिए OAuth स्कोपsdct-r
के बजाय पास करना होगा। अन्यथा, प्रवाह विफल हो जाएगा और अंतिम उपयोगकर्ता को एक त्रुटि दिखाई जाएगी।// Request access to Yahoo Mail API. provider_data.scopes.push_back("mail-r"); // This must be preconfigured in the app's API permissions. provider_data.scopes.push_back("sdct-w");
अधिक जानने के लिए, Yahoo स्कोप दस्तावेज़ीकरण देखें।
एक बार आपका प्रदाता डेटा कॉन्फ़िगर हो जाने के बाद, इसका उपयोग एक FederatedOAuthProvider बनाने के लिए करें।
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
प्रमाणीकरण प्रदाता ऑब्जेक्ट का उपयोग करके फायरबेस के साथ प्रमाणित करें। ध्यान दें कि अन्य FirebaseAuth संचालन के विपरीत, यह एक वेब दृश्य को पॉप अप करके आपके UI को नियंत्रित करेगा जिसमें उपयोगकर्ता अपनी साख दर्ज कर सकता है।
साइन इन फ़्लो शुरू करने के लिए,
signInWithProvider
पर कॉल करें:firebase::Future<firebase::auth::SignInResult> result = auth->SignInWithProvider(provider_data);
आपका आवेदन तब प्रतीक्षा कर सकता है या भविष्य पर कॉलबैक पंजीकृत कर सकता है।
जबकि उपरोक्त उदाहरण साइन-इन प्रवाह पर ध्यान केंद्रित करते हैं, आपके पास याहू प्रदाता को
LinkWithProvider
का उपयोग करके मौजूदा उपयोगकर्ता से जोड़ने की क्षमता भी है। उदाहरण के लिए, आप एक से अधिक प्रदाताओं को एक ही उपयोगकर्ता से लिंक कर सकते हैं जिससे वे दोनों में से किसी के साथ साइन इन कर सकें।firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
उसी पैटर्न का उपयोग
ReauthenticateWithProvider
के साथ किया जा सकता है जिसका उपयोग संवेदनशील संचालन के लिए नए क्रेडेंशियल्स को पुनः प्राप्त करने के लिए किया जा सकता है जिसके लिए हाल ही में लॉगिन की आवश्यकता होती है।firebase::Future<firebase::auth::SignInResult> result = user->ReauthenticateWithProvider(provider_data);
आपका आवेदन तब प्रतीक्षा कर सकता है या भविष्य पर कॉलबैक पंजीकृत कर सकता है।
अगले कदम
उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल से लिंक किया जाता है—अर्थात, उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर, या प्रमाणीकरण प्रदाता जानकारी—जिसके साथ उपयोगकर्ता ने साइन इन किया है। यह नया खाता आपके फायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत है, और इसका उपयोग आपके प्रोजेक्ट में प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए किया जा सकता है, भले ही उपयोगकर्ता कैसे साइन इन करे।
अपने ऐप्स में, आप उपयोगकर्ता की बुनियादी प्रोफ़ाइल जानकारी
firebase::auth::User
ऑब्जेक्ट से प्राप्त कर सकते हैं:firebase::auth::User* user = auth->current_user(); if (user != nullptr) { 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();