आप शुरू से अंत तक साइन-इन प्रवाह को पूरा करने के लिए फायरबेस एसडीके का उपयोग करके अपने ऐप में वेब-आधारित जेनेरिक ओएथ लॉगिन को एकीकृत करके अपने उपयोगकर्ताओं को याहू जैसे ओएथ प्रदाताओं का उपयोग करके फायरबेस के साथ प्रमाणित करने की अनुमति दे सकते हैं।
शुरू करने से पहले
याहू खातों का उपयोग करने वाले उपयोगकर्ताओं को साइन इन करने के लिए, आपको पहले याहू को अपने फायरबेस प्रोजेक्ट के लिए साइन-इन प्रदाता के रूप में सक्षम करना होगा:
- फायरबेस कंसोल में, ऑथ सेक्शन खोलें।
- साइन इन विधि टैब पर, याहू प्रदाता को सक्षम करें।
- उस प्रदाता के डेवलपर कंसोल से क्लाइंट आईडी और क्लाइंट सीक्रेट को प्रदाता कॉन्फ़िगरेशन में जोड़ें:
Yahoo OAuth क्लाइंट को पंजीकृत करने के लिए, Yahoo के साथ वेब एप्लिकेशन को पंजीकृत करने के लिए Yahoo डेवलपर दस्तावेज़ का पालन करें।
दो ओपनआईडी कनेक्ट एपीआई अनुमतियों का चयन करना सुनिश्चित करें:
profile
औरemail
।- इन प्रदाताओं के साथ ऐप्स पंजीकृत करते समय, अपने प्रोजेक्ट के लिए
*.firebaseapp.com
डोमेन को अपने ऐप के रीडायरेक्ट डोमेन के रूप में पंजीकृत करना सुनिश्चित करें।
- सहेजें पर क्लिक करें.
यदि आपने अभी तक अपने ऐप का SHA-1 फ़िंगरप्रिंट निर्दिष्ट नहीं किया है, तो फ़ायरबेस कंसोल के सेटिंग पृष्ठ से ऐसा करें। अपने ऐप का SHA-1 फ़िंगरप्रिंट कैसे प्राप्त करें, इसके विवरण के लिए अपने क्लाइंट को प्रमाणित करना देखें।
फायरबेस एसडीके के साथ साइन-इन प्रवाह को संभालें
यदि आप एक एंड्रॉइड ऐप बना रहे हैं, तो अपने उपयोगकर्ताओं को उनके याहू खातों का उपयोग करके फायरबेस के साथ प्रमाणित करने का सबसे आसान तरीका फायरबेस एंड्रॉइड एसडीके के साथ पूरे साइन-इन प्रवाह को संभालना है।
फायरबेस एंड्रॉइड एसडीके के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:
प्रदाता आईडी yahoo.com के साथ इसके बिल्डर का उपयोग करके OAuthProvider का एक उदाहरण बनाएं।
Kotlin+KTX
val provider = OAuthProvider.newBuilder("yahoo.com")
Java
OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");
वैकल्पिक : अतिरिक्त कस्टम OAuth पैरामीटर निर्दिष्ट करें जिन्हें आप OAuth अनुरोध के साथ भेजना चाहते हैं।
Kotlin+KTX
// Prompt user to re-authenticate to Yahoo. provider.addCustomParameter("prompt", "login") // Localize to French. provider.addCustomParameter("language", "fr")
Java
// Prompt user to re-authenticate to Yahoo. provider.addCustomParameter("prompt", "login"); // Localize to French. provider.addCustomParameter("language", "fr");
Yahoo द्वारा समर्थित पैरामीटरों के लिए, Yahoo OAuth दस्तावेज़ देखें। ध्यान दें कि आप
setCustomParameters()
के साथ Firebase-आवश्यक पैरामीटर पास नहीं कर सकते। ये पैरामीटर क्लाइंट_आईडी , रीडायरेक्ट_यूरी , रिस्पॉन्स_टाइप , स्कोप और स्टेट हैं ।वैकल्पिक :
profile
औरemail
से परे अतिरिक्त OAuth 2.0 स्कोप निर्दिष्ट करें जिसे आप प्रमाणीकरण प्रदाता से अनुरोध करना चाहते हैं। यदि आपके एप्लिकेशन को याहू एपीआई से निजी उपयोगकर्ता डेटा तक पहुंच की आवश्यकता है, तो आपको याहू डेवलपर कंसोल में एपीआई अनुमतियों के तहत याहू एपीआई के लिए अनुमति का अनुरोध करना होगा। अनुरोधित OAuth स्कोप ऐप की एपीआई अनुमतियों में पूर्व-कॉन्फ़िगर किए गए स्कोप से सटीक मेल खाने चाहिए। उदाहरण के लिए, यदि उपयोगकर्ता संपर्कों के लिए पढ़ने/लिखने की पहुंच का अनुरोध किया गया है और ऐप की एपीआई अनुमतियों में पूर्व-कॉन्फ़िगर किया गया है, तो केवल पढ़ने योग्य OAuth स्कोपsdct-r
के बजायsdct-w
को पारित करना होगा। अन्यथा, प्रवाह विफल हो जाएगा और अंतिम उपयोगकर्ता को एक त्रुटि दिखाई जाएगी।Kotlin+KTX
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = listOf("mail-r", "sdct-w")
Java
// 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>() { { // Request access to Yahoo Mail API. add("mail-r"); // This must be preconfigured in the app's API permissions. add("sdct-w"); } }; provider.setScopes(scopes);
अधिक जानने के लिए, Yahoo स्कोप दस्तावेज़ देखें।OAuth प्रदाता ऑब्जेक्ट का उपयोग करके फ़ायरबेस से प्रमाणित करें। ध्यान दें कि अन्य फायरबेसऑथ ऑपरेशंस के विपरीत, यह एक कस्टम क्रोम टैब को पॉप अप करके आपके यूआई को नियंत्रित करेगा। परिणामस्वरूप, अपनी गतिविधि को OnSuccessListeners और OnFairureListeners में संदर्भित न करें जिन्हें आप संलग्न करते हैं क्योंकि यूआई शुरू होने पर ऑपरेशन तुरंत अलग हो जाएगा।
आपको पहले यह जांचना चाहिए कि क्या आपको पहले ही कोई प्रतिक्रिया मिल चुकी है। इस पद्धति के माध्यम से साइन इन करने से आपकी गतिविधि पृष्ठभूमि में चली जाती है, जिसका अर्थ है कि इसे साइन इन प्रवाह के दौरान सिस्टम द्वारा पुनः प्राप्त किया जा सकता है। यह सुनिश्चित करने के लिए कि ऐसा होने पर आप उपयोगकर्ता को दोबारा प्रयास न करने दें, आपको जांचना चाहिए कि क्या कोई परिणाम पहले से मौजूद है।
यह जांचने के लिए कि क्या कोई परिणाम लंबित है,
getPendingAuthResult
पर कॉल करें:Kotlin+KTX
val pendingResultTask = firebaseAuth.pendingAuthResult if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. } } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Java
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: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .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
पर कॉल करें:Kotlin+KTX
firebaseAuth .startActivityForSignInWithProvider(activity, provider.build()) .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. }
Java
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: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
सफल समापन पर, प्रदाता से जुड़े OAuth एक्सेस टोकन को लौटाए गए
OAuthCredential
ऑब्जेक्ट से पुनर्प्राप्त किया जा सकता है।OAuth एक्सेस टोकन का उपयोग करके, आप Yahoo API को कॉल कर सकते हैं।
जहां
YAHOO_USER_UID
याहू उपयोगकर्ता की आईडी है जिसेfirebaseAuth.getCurrentUser().getProviderData().get(0).getUid()
फ़ील्ड याauthResult.getAdditionalUserInfo().getProfile()
से पार्स किया जा सकता है।जबकि उपरोक्त उदाहरण साइन-इन प्रवाह पर ध्यान केंद्रित करते हैं, आपके पास
startActivityForLinkWithProvider
का उपयोग करके याहू प्रदाता को मौजूदा उपयोगकर्ता से लिंक करने की क्षमता भी है। उदाहरण के लिए, आप कई प्रदाताओं को एक ही उपयोगकर्ता से लिंक कर सकते हैं और उन्हें किसी एक के साथ साइन इन करने की अनुमति दे सकते हैं।Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForLinkWithProvider(activity, provider.build()) .addOnSuccessListener { // Provider 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(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } .addOnFailureListener { // Handle failure. }
Java
// 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) { // Provider 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(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
उसी पैटर्न का उपयोग
startActivityForReauthenticateWithProvider
के साथ किया जा सकता है जिसका उपयोग संवेदनशील संचालन के लिए ताजा क्रेडेंशियल पुनर्प्राप्त करने के लिए किया जा सकता है जिनके लिए हाल ही में लॉगिन की आवश्यकता होती है।Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForReauthenticateWithProvider(activity, provider.build()) .addOnSuccessListener { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } .addOnFailureListener { // Handle failure. }
Java
// 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
पर कॉल करें:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();