आप एंड टू एंड साइन-इन प्रवाह को पूरा करने के लिए फायरबेस एसडीके का उपयोग करके अपने ऐप में वेब-आधारित जेनेरिक ओएथ लॉगिन को एकीकृत करके अपने उपयोगकर्ताओं को उनके गिटहब खातों का उपयोग करके फायरबेस के साथ प्रमाणित कर सकते हैं।
शुरू करने से पहले
GitHub खातों का उपयोग करने वाले उपयोगकर्ताओं में साइन इन करने के लिए, आपको पहले अपने Firebase प्रोजेक्ट के लिए GitHub को साइन-इन प्रदाता के रूप में सक्षम करना होगा:
यदि आपने पहले से ऐसा नहीं किया है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें ।
- फायरबेस कंसोल में, प्रामाणिक अनुभाग खोलें।
- साइन इन विधि टैब पर, GitHub प्रदाता को सक्षम करें।
- प्रदाता के कॉन्फ़िगरेशन में उस प्रदाता के डेवलपर कंसोल से क्लाइंट आईडी और क्लाइंट सीक्रेट जोड़ें:
- अपने ऐप को GitHub पर डेवलपर एप्लिकेशन के रूप में पंजीकृत करें और अपने ऐप का OAuth 2.0 क्लाइंट आईडी और क्लाइंट सीक्रेट प्राप्त करें।
- सुनिश्चित करें कि आपका Firebase OAuth रीडायरेक्ट URI (उदा
my-app-12345.firebaseapp.com/__/auth/handler
) आपके GitHub ऐप के कॉन्फ़िगरेशन पर आपके ऐप के सेटिंग पेज में आपके प्राधिकरण कॉलबैक URL के रूप में सेट है।
- सहेजें क्लिक करें.
फायरबेस एंड्रॉइड बीओएम का उपयोग करके, अपने मॉड्यूल (ऐप-लेवल) ग्रैडल फ़ाइल (आमतौर पर
app/build.gradle
) में फायरबेस ऑथेंटिकेशन एंड्रॉइड लाइब्रेरी के लिए निर्भरता की घोषणा करें।Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.0.2') // Declare the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth' }
फायरबेस एंड्रॉइड बीओएम का उपयोग करके, आपका ऐप हमेशा फायरबेस एंड्रॉइड लाइब्रेरी के संगत संस्करणों का उपयोग करेगा।
(वैकल्पिक) BoM . का उपयोग किए बिना फायरबेस लाइब्रेरी निर्भरता घोषित करें
यदि आप फायरबेस बीओएम का उपयोग नहीं करना चुनते हैं, तो आपको प्रत्येक फायरबेस लाइब्रेरी संस्करण को उसकी निर्भरता रेखा में निर्दिष्ट करना होगा।
ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए BoM का उपयोग करने की अत्यधिक अनुशंसा करते हैं, जो सुनिश्चित करता है कि सभी संस्करण संगत हैं।
dependencies { // Declare the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth:21.0.4' }
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.0.2') // Declare the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth-ktx' }
फायरबेस एंड्रॉइड बीओएम का उपयोग करके, आपका ऐप हमेशा फायरबेस एंड्रॉइड लाइब्रेरी के संगत संस्करणों का उपयोग करेगा।
(वैकल्पिक) BoM . का उपयोग किए बिना फायरबेस लाइब्रेरी निर्भरता घोषित करें
यदि आप फायरबेस बीओएम का उपयोग नहीं करना चुनते हैं, तो आपको प्रत्येक फायरबेस लाइब्रेरी संस्करण को उसकी निर्भरता रेखा में निर्दिष्ट करना होगा।
ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए BoM का उपयोग करने की अत्यधिक अनुशंसा करते हैं, जो सुनिश्चित करता है कि सभी संस्करण संगत हैं।
dependencies { // Declare the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth-ktx:21.0.4' }
यदि आपने अभी तक अपने ऐप का SHA-1 फ़िंगरप्रिंट निर्दिष्ट नहीं किया है, तो ऐसा Firebase कंसोल के सेटिंग पृष्ठ से करें। अपने ऐप का SHA-1 फ़िंगरप्रिंट कैसे प्राप्त करें, इसके विवरण के लिए अपने क्लाइंट को प्रमाणित करना देखें।
Firebase SDK के साथ साइन-इन प्रवाह को प्रबंधित करें
यदि आप एक Android ऐप बना रहे हैं, तो अपने GitHub खातों का उपयोग करके अपने उपयोगकर्ताओं को Firebase से प्रमाणित करने का सबसे आसान तरीका है, Firebase Android SDK के साथ संपूर्ण साइन-इन प्रवाह को संभालना।
Firebase Android SDK के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:
प्रदाता आईडी github.com के साथ अपने बिल्डर का उपयोग करके OAuthProvider का एक उदाहरण बनाएं
OAuthProvider.Builder provider = OAuthProvider.newBuilder("github.com");
वैकल्पिक : अतिरिक्त कस्टम OAuth पैरामीटर निर्दिष्ट करें जिन्हें आप OAuth अनुरोध के साथ भेजना चाहते हैं।
// Target specific email with login hint. provider.addCustomParameter("login", "your-email@gmail.com");
GitHub द्वारा समर्थित मापदंडों के लिए, GitHub OAuth दस्तावेज़ देखें। ध्यान दें कि आप
setCustomParameters()
के साथ Firebase-आवश्यक पैरामीटर पास नहीं कर सकते। ये पैरामीटर हैं client_id , response_type , redirect_uri , State , scope और response_mode ।वैकल्पिक : मूल प्रोफ़ाइल से परे अतिरिक्त OAuth 2.0 स्कोप निर्दिष्ट करें जिसका आप प्रमाणीकरण प्रदाता से अनुरोध करना चाहते हैं। यदि आपके एप्लिकेशन को GitHub API से निजी उपयोगकर्ता डेटा तक पहुंच की आवश्यकता है, तो आपको GitHub डेवलपर कंसोल में API अनुमतियों के अंतर्गत GitHub API तक पहुंचने के लिए अनुमतियों का अनुरोध करना होगा। अनुरोधित OAuth स्कोप ऐप की API अनुमतियों में पूर्व-कॉन्फ़िगर किए गए स्कोप से सटीक रूप से मेल खाने चाहिए।
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. List<String> scopes = new ArrayList<String>() { { add("user:email"); } }; provider.setScopes(scopes);
OAuth प्रदाता ऑब्जेक्ट का उपयोग करके Firebase से प्रमाणित करें। ध्यान दें कि अन्य FirebaseAuth संचालनों के विपरीत, यह कस्टम Chrome टैब को पॉप अप करके आपके UI को नियंत्रित करेगा। परिणामस्वरूप, अपनी गतिविधि को
OnSuccessListener
औरOnFailureListener
में संदर्भित न करें जिसे आप संलग्न करते हैं क्योंकि जब ऑपरेशन UI शुरू करता है तो वे तुरंत अलग हो जाएंगे।आपको पहले जांच करनी चाहिए कि क्या आपको पहले ही कोई प्रतिक्रिया मिली है। इस पद्धति के माध्यम से साइन इन करने से आपकी गतिविधि पृष्ठभूमि में आ जाती है, जिसका अर्थ है कि साइन इन प्रवाह के दौरान सिस्टम द्वारा इसे पुनः प्राप्त किया जा सकता है। यह सुनिश्चित करने के लिए कि यदि ऐसा होता है तो आप उपयोगकर्ता को फिर से प्रयास करने के लिए नहीं कहते हैं, आपको यह जांचना चाहिए कि कोई परिणाम पहले से मौजूद है या नहीं।
यह जांचने के लिए कि क्या कोई परिणाम लंबित है,
getPendingAuthResult
पर कॉल करें:Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult(); if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } }); } else { // There's no pending result so you need to start the sign-in flow. // See below. }
साइन इन फ्लो शुरू करने के लिए
startActivityForSignInWithProvider
पर कॉल करें:firebaseAuth .startActivityForSignInWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
सफलतापूर्वक पूरा होने पर, प्रदाता से जुड़े OAuth एक्सेस टोकन को लौटाए गए
OAuthCredential
ऑब्जेक्ट से पुनर्प्राप्त किया जा सकता है।OAuth एक्सेस टोकन का उपयोग करके, आप GitHub API को कॉल कर सकते हैं।
उदाहरण के लिए, बुनियादी प्रोफ़ाइल जानकारी प्राप्त करने के लिए, आप
Authorization
शीर्षलेख में एक्सेस टोकन पास करके आरईएसटी एपीआई को कॉल कर सकते हैं:जबकि उपरोक्त उदाहरण साइन-इन प्रवाह पर ध्यान केंद्रित करते हैं, आपके पास एक GitHub प्रदाता को
startActivityForLinkWithProvider
का उपयोग करके मौजूदा उपयोगकर्ता से जोड़ने की क्षमता भी है। उदाहरण के लिए, आप एक से अधिक प्रदाताओं को एक ही उपयोगकर्ता से लिंक कर सकते हैं जिससे वे दोनों में से किसी के साथ साइन इन कर सकें।// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForLinkWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // GitHub credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
उसी पैटर्न का उपयोग
startActivityForReauthenticateWithProvider
के साथ किया जा सकता है जिसका उपयोग संवेदनशील संचालन के लिए नए क्रेडेंशियल्स को पुनः प्राप्त करने के लिए किया जा सकता है जिसके लिए हाल ही में लॉगिन की आवश्यकता होती है।// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
अगले कदम
उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल से लिंक किया जाता है—अर्थात, उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर, या प्रमाणीकरण प्रदाता जानकारी—जिससे उपयोगकर्ता ने साइन इन किया है। यह नया खाता आपके फ़ायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत किया जाता है, और इसका उपयोग आपके प्रोजेक्ट में प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए किया जा सकता है, भले ही उपयोगकर्ता कैसे साइन इन करे।
अपने ऐप्स में, आप उपयोगकर्ता की मूलभूत प्रोफ़ाइल जानकारी
FirebaseUser
ऑब्जेक्ट से प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें।अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप
auth
चर से साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।
किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut
पर कॉल करें:
Java
FirebaseAuth.getInstance().signOut();
Kotlin+KTX
Firebase.auth.signOut()