Android पर Yahoo का उपयोग करके प्रमाणित करें

आप अपने उपयोगकर्ताओं को याहू जैसे OAuth प्रदाताओं का उपयोग करके अपने ऐप में वेब-आधारित जेनेरिक OAuth लॉगिन को एकीकृत करके Firebase SDK का उपयोग करके अपने उपयोगकर्ताओं को शुरू से अंत तक साइन-इन प्रवाह को पूरा करने की अनुमति दे सकते हैं।

शुरू करने से पहले

Yahoo खातों का उपयोग करने वाले उपयोगकर्ताओं में साइन इन करने के लिए, आपको पहले Yahoo को अपने Firebase प्रोजेक्ट के लिए साइन-इन प्रदाता के रूप में सक्षम करना होगा:

  1. अपने Android प्रोजेक्ट में Firebase जोड़ें

  2. फायरबेस कंसोल में, प्रामाणिक अनुभाग खोलें।
  3. साइन इन विधि टैब पर, Yahoo प्रदाता को सक्षम करें।
  4. प्रदाता के कॉन्फ़िगरेशन में उस प्रदाता के डेवलपर कंसोल से क्लाइंट आईडी और क्लाइंट सीक्रेट जोड़ें:
    1. Yahoo OAuth क्लाइंट को पंजीकृत करने के लिए, Yahoo के साथ वेब एप्लिकेशन पंजीकृत करने पर Yahoo डेवलपर दस्तावेज़ का पालन करें।

      दो OpenID Connect API अनुमतियों का चयन करना सुनिश्चित करें: profile और email

    2. इन प्रदाताओं के साथ ऐप्स पंजीकृत करते समय, अपने प्रोजेक्ट के लिए *.firebaseapp.com डोमेन को अपने ऐप के रीडायरेक्ट डोमेन के रूप में पंजीकृत करना सुनिश्चित करें।
  5. सहेजें क्लिक करें.
  6. यदि आपने अभी तक अपने ऐप का SHA-1 फ़िंगरप्रिंट निर्दिष्ट नहीं किया है, तो ऐसा Firebase कंसोल के सेटिंग पृष्ठ से करें। अपने ऐप का SHA-1 फ़िंगरप्रिंट कैसे प्राप्त करें, इसके विवरण के लिए अपने क्लाइंट को प्रमाणित करना देखें।

Firebase SDK के साथ साइन-इन प्रवाह को प्रबंधित करें

यदि आप एक Android ऐप बना रहे हैं, तो अपने Yahoo खातों का उपयोग करके अपने उपयोगकर्ताओं को Firebase से प्रमाणित करने का सबसे आसान तरीका है, Firebase Android SDK के साथ संपूर्ण साइन-इन प्रवाह को संभालना।

Firebase Android SDK के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:

  1. प्रदाता आईडी yahoo.com के साथ अपने निर्माता का उपयोग करके OAuthProvider का एक उदाहरण बनाएं।

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");
    
  2. वैकल्पिक : अतिरिक्त कस्टम OAuth पैरामीटर निर्दिष्ट करें जिन्हें आप OAuth अनुरोध के साथ भेजना चाहते हैं।

    // Prompt user to re-authenticate to Yahoo.
    provider.addCustomParameter("prompt", "login");
    
    // Localize to French.
    provider.addCustomParameter("language", "fr");
    

    Yahoo द्वारा समर्थित पैरामीटर के लिए, Yahoo OAuth दस्तावेज़ीकरण देखें। ध्यान दें कि आप setCustomParameters() के साथ Firebase-आवश्यक पैरामीटर पास नहीं कर सकते। ये पैरामीटर हैं client_id , redirect_uri , response_type , scope और State

  3. वैकल्पिक : profile और email से परे अतिरिक्त OAuth 2.0 स्कोप निर्दिष्ट करें जिसका आप प्रमाणीकरण प्रदाता से अनुरोध करना चाहते हैं। यदि आपके एप्लिकेशन को Yahoo API से निजी उपयोगकर्ता डेटा तक पहुंच की आवश्यकता है, तो आपको Yahoo डेवलपर कंसोल में API अनुमतियों के अंतर्गत Yahoo API के लिए अनुमतियों का अनुरोध करने की आवश्यकता होगी। अनुरोधित OAuth स्कोप ऐप की API अनुमतियों में पूर्व-कॉन्फ़िगर किए गए स्कोप से सटीक रूप से मेल खाने चाहिए। उदाहरण के लिए, यदि उपयोगकर्ता संपर्कों को पढ़ने/लिखने का अनुरोध किया गया है और ऐप की एपीआई अनुमतियों में पूर्व-कॉन्फ़िगर किया गया है, sdct-w को केवल पढ़ने के लिए OAuth स्कोप sdct-r के बजाय पास करना होगा। अन्यथा, प्रवाह विफल हो जाएगा और अंतिम उपयोगकर्ता को एक त्रुटि दिखाई जाएगी।

    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 स्कोप दस्तावेज़ीकरण देखें।

  4. OAuth प्रदाता ऑब्जेक्ट का उपयोग करके Firebase से प्रमाणित करें। ध्यान दें कि अन्य FirebaseAuth संचालनों के विपरीत, यह कस्टम Chrome टैब को पॉप अप करके आपके UI को नियंत्रित करेगा। परिणामस्वरूप, अपनी गतिविधि को OnSuccessListeners और OnFailureListeners में संदर्भित न करें जिसे आप संलग्न करते हैं क्योंकि जब ऑपरेशन UI शुरू होता है तो वे तुरंत अलग हो जाएंगे।

    आपको पहले जांच करनी चाहिए कि क्या आपको पहले ही कोई प्रतिक्रिया मिली है। इस पद्धति के माध्यम से साइन इन करने से आपकी गतिविधि पृष्ठभूमि में आ जाती है, जिसका अर्थ है कि साइन इन प्रवाह के दौरान सिस्टम द्वारा इसे पुनः प्राप्त किया जा सकता है। यह सुनिश्चित करने के लिए कि यदि ऐसा होता है तो आप उपयोगकर्ता को फिर से प्रयास करने के लिए नहीं कहते हैं, आपको यह जांचना चाहिए कि कोई परिणाम पहले से मौजूद है या नहीं।

    यह जांचने के लिए कि क्या कोई परिणाम लंबित है, getPendingAuthResult पर कॉल करें:

    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    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 be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // Yahoo OAuth ID token can be retrieved:
                  // authResult.getCredential().getIdToken().
                }
              })
          .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 be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    सफलतापूर्वक पूरा होने पर, प्रदाता से जुड़े OAuth एक्सेस टोकन को लौटाए गए OAuthCredential ऑब्जेक्ट से पुनर्प्राप्त किया जा सकता है।

    OAuth पहुंच टोकन का उपयोग करके, आप Yahoo API को कॉल कर सकते हैं।

    जहां YAHOO_USER_UID Yahoo उपयोगकर्ता की आईडी है जिसे firebaseAuth.getCurrentUser().getProviderData().get(0).getUid() फ़ील्ड से या authResult.getAdditionalUserInfo().getProfile() से पार्स किया जा सकता है।

  5. जबकि उपरोक्त उदाहरण साइन-इन प्रवाह पर ध्यान केंद्रित करते हैं, आपके पास startActivityForLinkWithProvider का उपयोग करके किसी Yahoo प्रदाता को मौजूदा उपयोगकर्ता से जोड़ने की क्षमता भी है। उदाहरण के लिए, आप एक से अधिक प्रदाताओं को एक ही उपयोगकर्ता से लिंक कर सकते हैं जिससे वे दोनों में से किसी के साथ साइन इन कर सकें।

    // 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) {
                // Yahoo credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
  6. उसी पैटर्न का उपयोग 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()