वेब पर काम करने वाले सामान्य OAuth लॉगिन को Firebase SDK की मदद से अपने ऐप्लिकेशन में इंटिग्रेट करके, उपयोगकर्ताओं को Yahoo जैसे OAuth प्रोवाइडर की मदद से Firebase में पुष्टि करने की अनुमति दी जा सकती है. इससे, साइन-इन करने की पूरी प्रोसेस को पूरा किया जा सकता है. इस प्रोसेस के लिए, फ़ोन पर काम करने वाले Firebase SDK का इस्तेमाल करना ज़रूरी है. इसलिए, यह सिर्फ़ Android और Apple प्लैटफ़ॉर्म पर काम करती है.
शुरू करने से पहले
- अपने C++ प्रोजेक्ट में Firebase जोड़ें.
- Firebase कंसोल में, सुरक्षा > पुष्टि पर जाएं.
- साइन-इन करने का तरीका टैब में, Yahoo साइन-इन प्रोवाइडर को चालू करें.
-
उस प्रोवाइडर के डेवलपर कंसोल से क्लाइंट आईडी और क्लाइंट सीक्रेट को, प्रोवाइडर के कॉन्फ़िगरेशन में जोड़ें:
-
Yahoo OAuth क्लाइंट रजिस्टर करने के लिए, Yahoo के साथ वेब ऐप्लिकेशन रजिस्टर करने के बारे में Yahoo के डेवलपर दस्तावेज़ में दिया गया तरीका अपनाएं .
OpenID Connect API की ये दो अनुमतियां ज़रूर चुनें:
profileऔरemail. -
इन प्रोवाइडर के साथ ऐप्लिकेशन रजिस्टर करते समय, अपने प्रोजेक्ट के लिए
*.firebaseapp.comडोमेन को अपने ऐप्लिकेशन के रीडायरेक्ट डोमेन के तौर पर रजिस्टर करना न भूलें.
-
- सेव करें पर क्लिक करें.
firebase::auth::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 की मदद से साइन-इन करने की प्रोसेस को मैनेज करना
Firebase SDK की मदद से साइन-इन करने की प्रोसेस को मैनेज करने के लिए, यह तरीका अपनाएं:
FederatedOAuthProviderDataका एक इंस्टेंस बनाएं. इसे Yahoo के लिए सही प्रोवाइडर आईडी के साथ कॉन्फ़िगर करें.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()के साथ, Firebase के लिए ज़रूरी पैरामीटर पास नहीं किए जा सकते. ये पैरामीटर client_id, redirect_uri, response_type, scope और state हैं.ज़रूरी नहीं: OAuth 2.0 के ऐसे अन्य स्कोप तय करें जिनका अनुरोध, पुष्टि करने वाले प्रोवाइडर से करना है. ये स्कोप,
profileऔरemailके अलावा होने चाहिए. अगर आपके ऐप्लिकेशन को Yahoo के एपीआई से, उपयोगकर्ता के निजी डेटा को ऐक्सेस करने की ज़रूरत है, तो आपको Yahoo के डेवलपर कंसोल में एपीआई की अनुमतियां में जाकर, Yahoo के एपीआई के लिए अनुमतियों का अनुरोध करना होगा. OAuth के अनुरोध किए गए स्कोप, ऐप्लिकेशन की एपीआई अनुमतियों में पहले से कॉन्फ़िगर किए गए स्कोप से पूरी तरह मेल खाने चाहिए. उदाहरण के लिए, अगर उपयोगकर्ता के संपर्कों को पढ़ने/लिखने का ऐक्सेस मांगा गया है और ऐप्लिकेशन की एपीआई अनुमतियों में यह पहले से कॉन्फ़िगर है, तो सिर्फ़ पढ़ने के लिए OAuth स्कोपsdct-rके बजाय,sdct-wपास करना होगा. ऐसा न करने पर,प्रोसेस पूरी नहीं हो पाएगी और आखिरी उपयोगकर्ता को गड़बड़ी दिखेगी.// 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);Auth प्रोवाइडर ऑब्जेक्ट का इस्तेमाल करके, Firebase से पुष्टि करें. ध्यान दें कि FirebaseAuth की अन्य कार्रवाइयों के उलट, यह आपके यूज़र इंटरफ़ेस (यूआई) का कंट्रोल ले लेगा. इसके लिए, यह एक वेब व्यू पॉप-अप करेगा, जिसमें उपयोगकर्ता अपने क्रेडेंशियल डाल सकता है.
साइन-इन करने की प्रोसेस शुरू करने के लिए,
SignInWithProviderको कॉल करें:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);इसके बाद, आपका ऐप्लिकेशन इंतज़ार कर सकता है या Future पर कॉलबैक रजिस्टर कर सकता है.
ऊपर दिए गए उदाहरणों में, साइन-इन करने की प्रोसेस पर फ़ोकस किया गया है. हालांकि, आपके पास
LinkWithProviderका इस्तेमाल करके, Yahoo प्रोवाइडर को किसी मौजूदा उपयोगकर्ता से लिंक करने की सुविधा भी होती है. उदाहरण के लिए, एक ही उपयोगकर्ता से कई प्रोवाइडर लिंक किए जा सकते हैं. इससे उपयोगकर्ता, इनमें से किसी भी प्रोवाइडर की मदद से साइन इन कर सकता है.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);ReauthenticateWithProviderके साथ भी इसी पैटर्न का इस्तेमाल किया जा सकता है. इसका इस्तेमाल, संवेदनशील कार्रवाइयों के लिए नए क्रेडेंशियल पाने के लिए किया जा सकता है. इन कार्रवाइयों के लिए, हाल ही में लॉगिन करना ज़रूरी होता है.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);इसके बाद, आपका ऐप्लिकेशन इंतज़ार कर सकता है या Future पर कॉलबैक रजिस्टर कर सकता है.
अगले चरण
जब कोई उपयोगकर्ता पहली बार साइन इन करता है, तो एक नया उपयोगकर्ता खाता बनता है. यह खाता, उन क्रेडेंशियल से लिंक होता है जिनका इस्तेमाल करके उपयोगकर्ता ने साइन इन किया है. जैसे, उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर या पुष्टि करने वाले प्रोवाइडर की जानकारी. यह नया खाता, आपके 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();