जावास्क्रिप्ट के साथ Apple का उपयोग करके प्रमाणित करें

आप एंड-टू-एंड OAuth 2.0 साइन-इन प्रवाह को पूरा करने के लिए Firebase SDK का उपयोग करके अपने उपयोगकर्ताओं को उनकी Apple ID का उपयोग करके Firebase से प्रमाणित करने दे सकते हैं।

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

Apple का उपयोग करने वाले उपयोगकर्ताओं को साइन इन करने के लिए, पहले Apple की डेवलपर साइट पर साइन इन विथ Apple कॉन्फ़िगर करें, फिर Apple को अपने फायरबेस प्रोजेक्ट के लिए साइन-इन प्रदाता के रूप में सक्षम करें।

Apple डेवलपर प्रोग्राम से जुड़ें

Apple के साथ साइन इन केवल Apple डेवलपर प्रोग्राम के सदस्यों द्वारा ही कॉन्फ़िगर किया जा सकता है।

Apple के साथ साइन इन कॉन्फ़िगर करें

Apple डेवलपर साइट पर, निम्न कार्य करें:

  1. अपनी वेबसाइट को अपने ऐप के साथ संबद्ध करें जैसा कि वेब के लिए ऐप्पल के साथ कॉन्फिगर साइन इन के पहले खंड में बताया गया है। संकेत मिलने पर, निम्नलिखित यूआरएल को रिटर्न यूआरएल के रूप में पंजीकृत करें:

    https://YOUR_FIREBASE_PROJECT_ID.firebaseapp.com/__/auth/handler

    आप अपना फायरबेस प्रोजेक्ट आईडी फायरबेस कंसोल सेटिंग पेज पर प्राप्त कर सकते हैं।

    जब आपका काम पूरा हो जाए, तो अपनी नई सेवा आईडी पर ध्यान दें, जिसकी आपको अगले भाग में आवश्यकता होगी।

  2. Apple निजी कुंजी के साथ साइन इन बनाएं । आपको अगले अनुभाग में अपनी नई निजी कुंजी और कुंजी आईडी की आवश्यकता होगी।
  3. यदि आप फ़ायरबेस प्रमाणीकरण की किसी भी सुविधा का उपयोग करते हैं जो उपयोगकर्ताओं को ईमेल भेजती है, जिसमें ईमेल लिंक साइन-इन, ईमेल पता सत्यापन, खाता परिवर्तन निरस्तीकरण और अन्य शामिल हैं, तो Apple निजी ईमेल रिले सेवा को कॉन्फ़िगर करें और noreply@ YOUR_FIREBASE_PROJECT_ID .firebaseapp.com पंजीकरण करें (या आपका अनुकूलित ईमेल टेम्प्लेट डोमेन) ताकि Apple फ़ायरबेस प्रमाणीकरण द्वारा भेजे गए ईमेल को अज्ञात Apple ईमेल पते पर रिले कर सके।

Apple को साइन-इन प्रदाता के रूप में सक्षम करें

  1. अपने प्रोजेक्ट में फायरबेस जोड़ें
  2. फायरबेस कंसोल में, ऑथ सेक्शन खोलें। साइन इन विधि टैब पर, Apple प्रदाता को सक्षम करें। पिछले अनुभाग में आपके द्वारा बनाई गई सेवा आईडी निर्दिष्ट करें। इसके अलावा, OAuth कोड प्रवाह कॉन्फ़िगरेशन अनुभाग में, अपनी Apple टीम आईडी और पिछले अनुभाग में आपके द्वारा बनाई गई निजी कुंजी और कुंजी आईडी निर्दिष्ट करें।

Apple अज्ञात डेटा आवश्यकताओं का अनुपालन करें

साइन इन विद ऐप्पल उपयोगकर्ताओं को साइन इन करते समय अपने ईमेल पते सहित अपने डेटा को अज्ञात करने का विकल्प देता है। जो उपयोगकर्ता इस विकल्प को चुनते हैं उनके पास privaterelay.appleid.com ​​डोमेन के साथ ईमेल पते होते हैं। जब आप अपने ऐप में साइन इन विद ऐप्पल का उपयोग करते हैं, तो आपको इन अज्ञात ऐप्पल आईडी के संबंध में ऐप्पल की किसी भी लागू डेवलपर नीतियों या शर्तों का पालन करना होगा।

इसमें किसी भी सीधे पहचान वाली व्यक्तिगत जानकारी को अज्ञात ऐप्पल आईडी के साथ जोड़ने से पहले किसी भी आवश्यक उपयोगकर्ता की सहमति प्राप्त करना शामिल है। फायरबेस प्रमाणीकरण का उपयोग करते समय, इसमें निम्नलिखित क्रियाएं शामिल हो सकती हैं:

  • किसी ईमेल पते को अज्ञात Apple ID से लिंक करें या इसके विपरीत।
  • किसी फ़ोन नंबर को अज्ञात Apple ID से लिंक करें या इसके विपरीत
  • एक गैर-गुमनाम सामाजिक क्रेडेंशियल (फेसबुक, गूगल, आदि) को एक अज्ञात ऐप्पल आईडी से लिंक करें या इसके विपरीत।

उपरोक्त सूची संपूर्ण नहीं है. यह सुनिश्चित करने के लिए कि आपका ऐप Apple की आवश्यकताओं को पूरा करता है, अपने डेवलपर खाते के सदस्यता अनुभाग में Apple डेवलपर प्रोग्राम लाइसेंस अनुबंध देखें।

फायरबेस एसडीके के साथ साइन-इन प्रवाह को संभालें

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

फायरबेस जावास्क्रिप्ट एसडीके के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:

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

    Web modular API

    import { OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('apple.com');

    Web namespaced API

    var provider = new firebase.auth.OAuthProvider('apple.com');
  2. वैकल्पिक: डिफ़ॉल्ट से परे अतिरिक्त OAuth 2.0 स्कोप निर्दिष्ट करें जिसे आप प्रमाणीकरण प्रदाता से अनुरोध करना चाहते हैं।

    Web modular API

    provider.addScope('email');
    provider.addScope('name');

    Web namespaced API

    provider.addScope('email');
    provider.addScope('name');

    डिफ़ॉल्ट रूप से, जब प्रति ईमेल पता एक खाता सक्षम होता है, तो फायरबेस ईमेल और नाम स्कोप का अनुरोध करता है। यदि आप इस सेटिंग को प्रति ईमेल पते पर एकाधिक खातों में बदलते हैं, तो फ़ायरबेस ऐप्पल से किसी भी दायरे का अनुरोध नहीं करता है जब तक कि आप उन्हें निर्दिष्ट नहीं करते हैं।

  3. वैकल्पिक: यदि आप Apple की साइन-इन स्क्रीन को अंग्रेजी के अलावा किसी अन्य भाषा में प्रदर्शित करना चाहते हैं, तो locale पैरामीटर सेट करें। समर्थित स्थानों के लिए Apple से साइन इन दस्तावेज़ देखें।

    Web modular API

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });

    Web namespaced API

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });
  4. OAuth प्रदाता ऑब्जेक्ट का उपयोग करके फ़ायरबेस से प्रमाणित करें। आप पॉप-अप विंडो खोलकर या साइन-इन पेज पर रीडायरेक्ट करके अपने उपयोगकर्ताओं को उनके Apple खातों से साइन इन करने के लिए प्रेरित कर सकते हैं। मोबाइल उपकरणों पर रीडायरेक्ट विधि को प्राथमिकता दी जाती है।

    • पॉप-अप विंडो से साइन इन करने के लिए, signInWithPopup() पर कॉल करें:

      Web modular API

      import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // The signed-in user info.
          const user = result.user;
      
          // Apple credential
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
      
          // IdP data available using getAdditionalUserInfo(result)
          // ...
        })
        .catch((error) => {
          // Handle Errors here.
          const errorCode = error.code;
          const errorMessage = error.message;
          // The email of the user's account used.
          const email = error.customData.email;
          // The credential that was used.
          const credential = OAuthProvider.credentialFromError(error);
      
          // ...
        });

      Web namespaced API

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // The signed-in user info.
          var user = result.user;
      
          // You can also get the Apple OAuth Access and ID Tokens.
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
      
          // IdP data available using getAdditionalUserInfo(result)
        // ...
        })
        .catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
      
          // ...
        });
    • साइन-इन पेज पर रीडायरेक्ट करके साइन इन करने के लिए, signInWithRedirect() पर कॉल करें:

    signInWithRedirect , linkWithRedirect , या reauthenticateWithRedirect का उपयोग करते समय सर्वोत्तम प्रथाओं का पालन करें।

    Web modular API

    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);

    Web namespaced API

    firebase.auth().signInWithRedirect(provider);

    उपयोगकर्ता द्वारा साइन-इन पूरा करने और पृष्ठ पर लौटने के बाद, आप getRedirectResult() पर कॉल करके साइन-इन परिणाम प्राप्त कर सकते हैं:

    Web modular API

    import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth";
    
    // Result from Redirect auth flow.
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        const credential = OAuthProvider.credentialFromResult(result);
        if (credential) {
          // You can also get the Apple OAuth Access and ID Tokens.
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        }
        // The signed-in user info.
        const user = result.user;
      })
      .catch((error) => {
        // Handle Errors here.
        const errorCode = error.code;
        const errorMessage = error.message;
        // The email of the user's account used.
        const email = error.customData.email;
        // The credential that was used.
        const credential = OAuthProvider.credentialFromError(error);
    
        // ...
      });

    Web namespaced API

    // Result from Redirect auth flow.
    firebase
      .auth()
      .getRedirectResult()
      .then((result) => {
        if (result.credential) {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
    
          // You can get the Apple OAuth Access and ID Tokens.
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
    
          // IdP data available in result.additionalUserInfo.profile.
          // ...
        }
        // The signed-in user info.
        var user = result.user;
      })
      .catch((error) => {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
    
        // ...
      });

    यह वह जगह भी है जहां आप त्रुटियों को पकड़ और संभाल सकते हैं। त्रुटि कोड की सूची के लिए, एपीआई संदर्भ देखें।

    फायरबेस ऑथ द्वारा समर्थित अन्य प्रदाताओं के विपरीत, ऐप्पल एक फोटो यूआरएल प्रदान नहीं करता है।

    साथ ही, जब उपयोगकर्ता ऐप के साथ अपना ईमेल साझा नहीं करने का विकल्प चुनता है, तो ऐप्पल उस उपयोगकर्ता के लिए एक अद्वितीय ईमेल पता ( xyz@privaterelay.appleid.com फॉर्म का) प्रावधान करता है, जिसे वह आपके ऐप के साथ साझा करता है। यदि आपने निजी ईमेल रिले सेवा कॉन्फ़िगर की है, तो Apple अज्ञात पते पर भेजे गए ईमेल को उपयोगकर्ता के वास्तविक ईमेल पते पर अग्रेषित करता है।

    जब कोई उपयोगकर्ता पहली बार साइन इन करता है तो Apple केवल डिस्प्ले नाम जैसी उपयोगकर्ता जानकारी ऐप्स के साथ साझा करता है। आमतौर पर, जब उपयोगकर्ता पहली बार Apple के साथ साइन इन करता है, तो Firebase डिस्प्ले नाम संग्रहीत करता है, जिसे आप firebase.auth().currentUser.displayName । हालाँकि, यदि आपने पहले किसी उपयोगकर्ता को फायरबेस का उपयोग किए बिना ऐप में साइन इन करने के लिए ऐप्पल का उपयोग किया था, तो ऐप्पल उपयोगकर्ता के प्रदर्शन नाम के साथ फायरबेस प्रदान नहीं करेगा।

पुनःप्रमाणीकरण और खाता लिंकिंग

उसी पैटर्न का उपयोग reauthenticateWithPopup() और reauthenticateWithRedirect() के साथ किया जा सकता है, जिसका उपयोग आप उन संवेदनशील परिचालनों के लिए ताज़ा क्रेडेंशियल प्राप्त करने के लिए कर सकते हैं जिनके लिए हाल ही में साइन-इन की आवश्यकता होती है:

Web modular API

import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth";

// Result from Redirect auth flow.
const auth = getAuth();
const provider = new OAuthProvider('apple.com');

reauthenticateWithPopup(auth.currentUser, provider)
  .then((result) => {
    // User is re-authenticated with fresh tokens minted and can perform
    // sensitive operations like account deletion, or updating their email
    // address or password.

    // The signed-in user info.
    const user = result.user;

    // You can also get the Apple OAuth Access and ID Tokens.
    const credential = OAuthProvider.credentialFromResult(result);
    const accessToken = credential.accessToken;
    const idToken = credential.idToken;

    // ...
  })
  .catch((error) => {
    // Handle Errors here.
    const errorCode = error.code;
    const errorMessage = error.message;
    // The email of the user's account used.
    const email = error.customData.email;
    // The credential that was used.
    const credential = OAuthProvider.credentialFromError(error);

    // ...
  });

Web namespaced API

const provider = new firebase.auth.OAuthProvider('apple.com');

firebase
  .auth()
  .currentUser
  .reauthenticateWithPopup(provider)
  .then((result) => {
    // User is re-authenticated with fresh tokens minted and can perform
    // sensitive operations like account deletion, or updating their email
    // address or password.
    /** @type {firebase.auth.OAuthCredential} */
    var credential = result.credential;

    // The signed-in user info.
    var user = result.user;
     // You can also get the Apple OAuth Access and ID Tokens.
    var accessToken = credential.accessToken;
    var idToken = credential.idToken;

    // IdP data available in result.additionalUserInfo.profile.
      // ...
  })
  .catch((error) => {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    var email = error.email;
    // The firebase.auth.AuthCredential type that was used.
    var credential = error.credential;

    // ...
  });

और, आप विभिन्न पहचान प्रदाताओं को मौजूदा खातों से जोड़ने के लिए linkWithPopup() और linkWithRedirect() का उपयोग कर सकते हैं।

ध्यान दें कि Apple को अपने Apple खातों को अन्य डेटा से लिंक करने से पहले आपको उपयोगकर्ताओं से स्पष्ट सहमति प्राप्त करने की आवश्यकता है।

उदाहरण के लिए, किसी फेसबुक खाते को वर्तमान फायरबेस खाते से लिंक करने के लिए, उपयोगकर्ता को फेसबुक पर साइन इन करने से प्राप्त एक्सेस टोकन का उपयोग करें:

Web modular API

import { getAuth, linkWithPopup, FacebookAuthProvider } from "firebase/auth";

const auth = getAuth();
const provider = new FacebookAuthProvider();
provider.addScope('user_birthday');

// Assuming the current user is an Apple user linking a Facebook provider.
linkWithPopup(auth.currentUser, provider)
    .then((result) => {
      // Facebook credential is linked to the current Apple user.
      // ...

      // The user can now sign in to the same account
      // with either Apple or Facebook.
    })
    .catch((error) => {
      // Handle error.
    });

Web namespaced API

const provider = new firebase.auth.FacebookAuthProvider();
provider.addScope('user_birthday');

// Assuming the current user is an Apple user linking a Facebook provider.
firebase.auth().currentUser.linkWithPopup(provider)
    .then((result) => {
      // Facebook credential is linked to the current Apple user.
      // Facebook additional data available in result.additionalUserInfo.profile,

      // Additional Facebook OAuth access token can also be retrieved.
      // result.credential.accessToken

      // The user can now sign in to the same account
      // with either Apple or Facebook.
    })
    .catch((error) => {
      // Handle error.
    });

Chrome एक्सटेंशन में फ़ायरबेस से प्रमाणित करें

यदि आप Chrome एक्सटेंशन ऐप बना रहे हैं, तो ऑफ़स्क्रीन दस्तावेज़ मार्गदर्शिका देखें।

ध्यान दें कि आपको अभी भी Apple के साथ कस्टम डोमेन को डिफ़ॉल्ट firebaseapp.com डोमेन के समान सत्यापित करना होगा:

http://auth.custom.example.com/.well-known/apple-developer-domain-association.txt

टोकन निरस्तीकरण

ऐप्पल के लिए आवश्यक है कि जो ऐप खाता निर्माण का समर्थन करते हैं, उन्हें उपयोगकर्ताओं को ऐप के भीतर अपना खाता हटाने की अनुमति देनी चाहिए, जैसा कि ऐप स्टोर समीक्षा दिशानिर्देशों में बताया गया है।

इस आवश्यकता को पूरा करने के लिए, निम्नलिखित चरणों को लागू करें:

  1. सुनिश्चित करें कि आपने Apple प्रदाता कॉन्फ़िगरेशन के साथ साइन इन के सेवा आईडी और OAuth कोड प्रवाह कॉन्फ़िगरेशन अनुभाग को भर दिया है, जैसा कि Apple के साथ साइन इन कॉन्फ़िगर करें अनुभाग में बताया गया है।

  2. चूँकि जब उपयोगकर्ता ऐप्पल के साथ साइन इन करते हैं तो फायरबेस उपयोगकर्ता टोकन संग्रहीत नहीं करता है, इसलिए आपको उपयोगकर्ता को उनके टोकन को रद्द करने और खाता हटाने से पहले फिर से साइन इन करने के लिए कहना होगा।

    फिर, OAuthCredential से Apple OAuth एक्सेस टोकन प्राप्त करें, और Apple OAuth एक्सेस टोकन को रद्द करने के लिए revokeAccessToken(auth, token) कॉल करने के लिए इसका उपयोग करें।

    const provider = new OAuthProvider('apple.com');
    provider.addScope('email');
    provider.addScope('name');
    
    const auth = getAuth();
    signInWithPopup(auth, provider).then(result => {
      // Get the Apple OAuth access token.
      const credential = OAuthProvider.credentialFromResult(result);
      const accessToken = credential.accessToken;
    
      // Revoke the Apple OAuth access token.
      revokeAccessToken(auth, accessToken)
        .then(() => {
          // Token revoked.
    
          // Delete the user account.
          // ...
        })
        .catch(error => {
          // An error happened.
          // ...
        });
    });
    
  3. अंत में, उपयोगकर्ता खाता (और सभी संबद्ध डेटा) हटा दें

उन्नत: Node.js में फायरबेस के साथ प्रमाणित करें

Node.js एप्लिकेशन में फ़ायरबेस से प्रमाणित करने के लिए:

  1. उपयोगकर्ता को अपने Apple खाते से साइन इन करें और उपयोगकर्ता का Apple ID टोकन प्राप्त करें। आप इसे कई तरीकों से पूरा कर सकते हैं. उदाहरण के लिए, यदि आपके Node.js ऐप में ब्राउज़र फ्रंट एंड है:

    1. अपने बैकएंड पर, एक यादृच्छिक स्ट्रिंग (एक "नॉनस") उत्पन्न करें और इसके SHA256 हैश की गणना करें। नॉन एक बार उपयोग मूल्य है जिसका उपयोग आप अपने बैकएंड और ऐप्पल के ऑथ सर्वर के बीच एकल राउंड ट्रिप को सत्यापित करने के लिए करते हैं।

      Web modular API

      const crypto = require("crypto");
      const string_decoder = require("string_decoder");
      
      // Generate a new random string for each sign-in
      const generateNonce = (length) => {
        const decoder = new string_decoder.StringDecoder("ascii");
        const buf = Buffer.alloc(length);
        let nonce = "";
        while (nonce.length < length) {
          crypto.randomFillSync(buf);
          nonce = decoder.write(buf);
        }
        return nonce.slice(0, length);
      };
      
      const unhashedNonce = generateNonce(10);
      
      // SHA256-hashed nonce in hex
      const hashedNonceHex = crypto.createHash('sha256')
        .update(unhashedNonce).digest().toString('hex');

      Web namespaced API

      const crypto = require("crypto");
      const string_decoder = require("string_decoder");
      
      // Generate a new random string for each sign-in
      const generateNonce = function(length) {
        const decoder = new string_decoder.StringDecoder("ascii");
        const buf = Buffer.alloc(length);
        var nonce = "";
        while (nonce.length < length) {
          crypto.randomFillSync(buf);
          nonce = decoder.write(buf);
        }
        return nonce.slice(0, length);
      };
      
      const unhashedNonce = generateNonce(10);
      
      // SHA256-hashed nonce in hex
      const hashedNonceHex = crypto.createHash('sha256')
        .update(unhashedNonce).digest().toString('hex');
    2. अपने साइन-इन पृष्ठ पर, Apple कॉन्फ़िगरेशन के साथ अपने साइन इन में हैशेड नॉन निर्दिष्ट करें:

      <script src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
      <div id="appleid-signin" data-color="black" data-border="true" data-type="sign in"></div>
      <script>
          AppleID.auth.init({
              clientId: YOUR_APPLE_CLIENT_ID,
              scope: 'name email',
              redirectURI: URL_TO_YOUR_REDIRECT_HANDLER,  // See the next step.
              state: '[STATE]',  // Optional value that Apple will send back to you
                                 // so you can return users to the same context after
                                 // they sign in.
              nonce: HASHED_NONCE  // The hashed nonce you generated in the previous step.
          });
      </script>
      
    3. पोस्ट किए गए ऑथ रिस्पॉन्स सर्वर-साइड से ऐप्पल आईडी टोकन प्राप्त करें:

      app.post('/redirect', (req, res) => {
        const savedState = req.cookies.__session;
        const code = req.body.code;
        const state = req.body.state;
        const appleIdToken = req.body.id_token;
        if (savedState !== state || !code) {
          res.status(403).send('403: Permission denied');
        } else {
          // Sign in with Firebase using appleIdToken. (See next step).
        }
      });
      

    Apple के साथ साइन इन करने के लिए अपने वेबपेज को कॉन्फ़िगर करना भी देखें।

  2. उपयोगकर्ता का ऐप्पल आईडी टोकन प्राप्त करने के बाद, क्रेडेंशियल ऑब्जेक्ट बनाने के लिए इसका उपयोग करें और फिर क्रेडेंशियल के साथ उपयोगकर्ता में साइन इन करें:

    Web modular API

    import { getAuth, signInWithCredential, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    
    // Build Firebase credential with the Apple ID token.
    const provider = new OAuthProvider('apple.com');
    const authCredential = provider.credential({
      idToken: appleIdToken,
      rawNonce: unhashedNonce,
    });
    
    // Sign in with credential form the Apple user.
    signInWithCredential(auth, authCredential)
      .then((result) => {
        // User signed in.
      })
      .catch((error) => {
        // An error occurred. If error.code == 'auth/missing-or-invalid-nonce',
        // make sure you're sending the SHA256-hashed nonce as a hex string
        // with your request to Apple.
        console.log(error);
      });

    Web namespaced API

    // Build Firebase credential with the Apple ID token.
    const provider = new firebase.auth.OAuthProvider('apple.com');
    const authCredential = provider.credential({
      idToken: appleIdToken,
      rawNonce: unhashedNonce,
    });
    
    // Sign in with credential form the Apple user.
    firebase.auth().signInWithCredential(authCredential)
      .then((result) => {
        // User signed in.
      })
      .catch((error) => {
        // An error occurred. If error.code == 'auth/missing-or-invalid-nonce',
        // make sure you're sending the SHA256-hashed nonce as a hex string
        // with your request to Apple.
        console.log(error);
      });

अगले कदम

किसी उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल्स से लिंक किया जाता है - यानी, उपयोगकर्ता नाम और पासवर्ड, फोन नंबर, या ऑथ प्रदाता जानकारी - जिस उपयोगकर्ता के साथ साइन इन किया जाता है। यह नया खाता आपके फायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत है, और इसका उपयोग आपके प्रोजेक्ट के प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए किया जा सकता है, भले ही उपयोगकर्ता कैसे भी साइन इन करता हो।

  • आपके ऐप्स में, आपके उपयोगकर्ता की प्रामाणिक स्थिति जानने का अनुशंसित तरीका Auth ऑब्जेक्ट पर एक पर्यवेक्षक सेट करना है। फिर आप User ऑब्जेक्ट से उपयोगकर्ता की मूल प्रोफ़ाइल जानकारी प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें.

  • अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी को auth वेरिएबल से प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप किसी मौजूदा उपयोगकर्ता खाते से प्रमाणीकरण प्रदाता क्रेडेंशियल्स को लिंक करके उपयोगकर्ताओं को एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut पर कॉल करें:

Web modular API

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web namespaced API

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});
,

आप एंड-टू-एंड OAuth 2.0 साइन-इन प्रवाह को पूरा करने के लिए Firebase SDK का उपयोग करके अपने उपयोगकर्ताओं को उनकी Apple ID का उपयोग करके Firebase से प्रमाणित करने दे सकते हैं।

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

Apple का उपयोग करने वाले उपयोगकर्ताओं को साइन इन करने के लिए, पहले Apple की डेवलपर साइट पर साइन इन विथ Apple कॉन्फ़िगर करें, फिर Apple को अपने फायरबेस प्रोजेक्ट के लिए साइन-इन प्रदाता के रूप में सक्षम करें।

Apple डेवलपर प्रोग्राम से जुड़ें

Apple के साथ साइन इन केवल Apple डेवलपर प्रोग्राम के सदस्यों द्वारा ही कॉन्फ़िगर किया जा सकता है।

Apple के साथ साइन इन कॉन्फ़िगर करें

Apple डेवलपर साइट पर, निम्न कार्य करें:

  1. अपनी वेबसाइट को अपने ऐप के साथ संबद्ध करें जैसा कि वेब के लिए ऐप्पल के साथ कॉन्फिगर साइन इन के पहले खंड में बताया गया है। संकेत मिलने पर, निम्नलिखित यूआरएल को रिटर्न यूआरएल के रूप में पंजीकृत करें:

    https://YOUR_FIREBASE_PROJECT_ID.firebaseapp.com/__/auth/handler

    आप अपना फायरबेस प्रोजेक्ट आईडी फायरबेस कंसोल सेटिंग पेज पर प्राप्त कर सकते हैं।

    जब आपका काम पूरा हो जाए, तो अपनी नई सेवा आईडी पर ध्यान दें, जिसकी आपको अगले भाग में आवश्यकता होगी।

  2. Apple निजी कुंजी के साथ साइन इन बनाएं । आपको अगले अनुभाग में अपनी नई निजी कुंजी और कुंजी आईडी की आवश्यकता होगी।
  3. यदि आप फ़ायरबेस प्रमाणीकरण की किसी भी सुविधा का उपयोग करते हैं जो उपयोगकर्ताओं को ईमेल भेजती है, जिसमें ईमेल लिंक साइन-इन, ईमेल पता सत्यापन, खाता परिवर्तन निरस्तीकरण और अन्य शामिल हैं, तो Apple निजी ईमेल रिले सेवा को कॉन्फ़िगर करें और noreply@ YOUR_FIREBASE_PROJECT_ID .firebaseapp.com पंजीकरण करें (या आपका अनुकूलित ईमेल टेम्प्लेट डोमेन) ताकि Apple फ़ायरबेस प्रमाणीकरण द्वारा भेजे गए ईमेल को अज्ञात Apple ईमेल पते पर रिले कर सके।

Apple को साइन-इन प्रदाता के रूप में सक्षम करें

  1. अपने प्रोजेक्ट में फायरबेस जोड़ें
  2. फायरबेस कंसोल में, ऑथ सेक्शन खोलें। साइन इन विधि टैब पर, Apple प्रदाता को सक्षम करें। पिछले अनुभाग में आपके द्वारा बनाई गई सेवा आईडी निर्दिष्ट करें। इसके अलावा, OAuth कोड प्रवाह कॉन्फ़िगरेशन अनुभाग में, अपनी Apple टीम आईडी और पिछले अनुभाग में आपके द्वारा बनाई गई निजी कुंजी और कुंजी आईडी निर्दिष्ट करें।

Apple अज्ञात डेटा आवश्यकताओं का अनुपालन करें

साइन इन विद ऐप्पल उपयोगकर्ताओं को साइन इन करते समय अपने ईमेल पते सहित अपने डेटा को अज्ञात करने का विकल्प देता है। जो उपयोगकर्ता इस विकल्प को चुनते हैं उनके पास privaterelay.appleid.com ​​डोमेन के साथ ईमेल पते होते हैं। जब आप अपने ऐप में साइन इन विद ऐप्पल का उपयोग करते हैं, तो आपको इन अज्ञात ऐप्पल आईडी के संबंध में ऐप्पल की किसी भी लागू डेवलपर नीतियों या शर्तों का पालन करना होगा।

इसमें किसी भी सीधे पहचान वाली व्यक्तिगत जानकारी को अज्ञात ऐप्पल आईडी के साथ जोड़ने से पहले किसी भी आवश्यक उपयोगकर्ता की सहमति प्राप्त करना शामिल है। फायरबेस प्रमाणीकरण का उपयोग करते समय, इसमें निम्नलिखित क्रियाएं शामिल हो सकती हैं:

  • किसी ईमेल पते को अज्ञात Apple ID से लिंक करें या इसके विपरीत।
  • किसी फ़ोन नंबर को अज्ञात Apple ID से लिंक करें या इसके विपरीत
  • एक गैर-गुमनाम सामाजिक क्रेडेंशियल (फेसबुक, गूगल, आदि) को एक अज्ञात ऐप्पल आईडी से लिंक करें या इसके विपरीत।

उपरोक्त सूची संपूर्ण नहीं है. यह सुनिश्चित करने के लिए कि आपका ऐप Apple की आवश्यकताओं को पूरा करता है, अपने डेवलपर खाते के सदस्यता अनुभाग में Apple डेवलपर प्रोग्राम लाइसेंस अनुबंध देखें।

फायरबेस एसडीके के साथ साइन-इन प्रवाह को संभालें

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

फायरबेस जावास्क्रिप्ट एसडीके के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:

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

    Web modular API

    import { OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('apple.com');

    Web namespaced API

    var provider = new firebase.auth.OAuthProvider('apple.com');
  2. वैकल्पिक: डिफ़ॉल्ट से परे अतिरिक्त OAuth 2.0 स्कोप निर्दिष्ट करें जिसे आप प्रमाणीकरण प्रदाता से अनुरोध करना चाहते हैं।

    Web modular API

    provider.addScope('email');
    provider.addScope('name');

    Web namespaced API

    provider.addScope('email');
    provider.addScope('name');

    डिफ़ॉल्ट रूप से, जब प्रति ईमेल पता एक खाता सक्षम होता है, तो फायरबेस ईमेल और नाम स्कोप का अनुरोध करता है। यदि आप इस सेटिंग को प्रति ईमेल पते पर एकाधिक खातों में बदलते हैं, तो फ़ायरबेस ऐप्पल से किसी भी दायरे का अनुरोध नहीं करता है जब तक कि आप उन्हें निर्दिष्ट नहीं करते हैं।

  3. वैकल्पिक: यदि आप Apple की साइन-इन स्क्रीन को अंग्रेजी के अलावा किसी अन्य भाषा में प्रदर्शित करना चाहते हैं, तो locale पैरामीटर सेट करें। समर्थित स्थानों के लिए Apple से साइन इन दस्तावेज़ देखें।

    Web modular API

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });

    Web namespaced API

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });
  4. OAuth प्रदाता ऑब्जेक्ट का उपयोग करके फ़ायरबेस से प्रमाणित करें। आप पॉप-अप विंडो खोलकर या साइन-इन पेज पर रीडायरेक्ट करके अपने उपयोगकर्ताओं को उनके Apple खातों से साइन इन करने के लिए प्रेरित कर सकते हैं। मोबाइल उपकरणों पर रीडायरेक्ट विधि को प्राथमिकता दी जाती है।

    • पॉप-अप विंडो से साइन इन करने के लिए, signInWithPopup() पर कॉल करें:

      Web modular API

      import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // The signed-in user info.
          const user = result.user;
      
          // Apple credential
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
      
          // IdP data available using getAdditionalUserInfo(result)
          // ...
        })
        .catch((error) => {
          // Handle Errors here.
          const errorCode = error.code;
          const errorMessage = error.message;
          // The email of the user's account used.
          const email = error.customData.email;
          // The credential that was used.
          const credential = OAuthProvider.credentialFromError(error);
      
          // ...
        });

      Web namespaced API

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // The signed-in user info.
          var user = result.user;
      
          // You can also get the Apple OAuth Access and ID Tokens.
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
      
          // IdP data available using getAdditionalUserInfo(result)
        // ...
        })
        .catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
      
          // ...
        });
    • साइन-इन पेज पर रीडायरेक्ट करके साइन इन करने के लिए, signInWithRedirect() पर कॉल करें:

    signInWithRedirect , linkWithRedirect , या reauthenticateWithRedirect का उपयोग करते समय सर्वोत्तम प्रथाओं का पालन करें।

    Web modular API

    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);

    Web namespaced API

    firebase.auth().signInWithRedirect(provider);

    उपयोगकर्ता द्वारा साइन-इन पूरा करने और पृष्ठ पर लौटने के बाद, आप getRedirectResult() पर कॉल करके साइन-इन परिणाम प्राप्त कर सकते हैं:

    Web modular API

    import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth";
    
    // Result from Redirect auth flow.
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        const credential = OAuthProvider.credentialFromResult(result);
        if (credential) {
          // You can also get the Apple OAuth Access and ID Tokens.
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        }
        // The signed-in user info.
        const user = result.user;
      })
      .catch((error) => {
        // Handle Errors here.
        const errorCode = error.code;
        const errorMessage = error.message;
        // The email of the user's account used.
        const email = error.customData.email;
        // The credential that was used.
        const credential = OAuthProvider.credentialFromError(error);
    
        // ...
      });

    Web namespaced API

    // Result from Redirect auth flow.
    firebase
      .auth()
      .getRedirectResult()
      .then((result) => {
        if (result.credential) {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
    
          // You can get the Apple OAuth Access and ID Tokens.
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
    
          // IdP data available in result.additionalUserInfo.profile.
          // ...
        }
        // The signed-in user info.
        var user = result.user;
      })
      .catch((error) => {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
    
        // ...
      });

    यह वह जगह भी है जहां आप त्रुटियों को पकड़ और संभाल सकते हैं। त्रुटि कोड की सूची के लिए, एपीआई संदर्भ देखें।

    फायरबेस ऑथ द्वारा समर्थित अन्य प्रदाताओं के विपरीत, ऐप्पल एक फोटो यूआरएल प्रदान नहीं करता है।

    साथ ही, जब उपयोगकर्ता ऐप के साथ अपना ईमेल साझा नहीं करने का विकल्प चुनता है, तो ऐप्पल उस उपयोगकर्ता के लिए एक अद्वितीय ईमेल पता ( xyz@privaterelay.appleid.com फॉर्म का) प्रावधान करता है, जिसे वह आपके ऐप के साथ साझा करता है। यदि आपने निजी ईमेल रिले सेवा कॉन्फ़िगर की है, तो Apple अज्ञात पते पर भेजे गए ईमेल को उपयोगकर्ता के वास्तविक ईमेल पते पर अग्रेषित करता है।

    जब कोई उपयोगकर्ता पहली बार साइन इन करता है तो Apple केवल डिस्प्ले नाम जैसी उपयोगकर्ता जानकारी ऐप्स के साथ साझा करता है। आमतौर पर, जब उपयोगकर्ता पहली बार Apple के साथ साइन इन करता है, तो Firebase डिस्प्ले नाम संग्रहीत करता है, जिसे आप firebase.auth().currentUser.displayName । हालाँकि, यदि आपने पहले किसी उपयोगकर्ता को फायरबेस का उपयोग किए बिना ऐप में साइन इन करने के लिए ऐप्पल का उपयोग किया था, तो ऐप्पल उपयोगकर्ता के प्रदर्शन नाम के साथ फायरबेस प्रदान नहीं करेगा।

पुनःप्रमाणीकरण और खाता लिंकिंग

उसी पैटर्न का उपयोग reauthenticateWithPopup() और reauthenticateWithRedirect() के साथ किया जा सकता है, जिसका उपयोग आप उन संवेदनशील परिचालनों के लिए ताज़ा क्रेडेंशियल प्राप्त करने के लिए कर सकते हैं जिनके लिए हाल ही में साइन-इन की आवश्यकता होती है:

Web modular API

import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth";

// Result from Redirect auth flow.
const auth = getAuth();
const provider = new OAuthProvider('apple.com');

reauthenticateWithPopup(auth.currentUser, provider)
  .then((result) => {
    // User is re-authenticated with fresh tokens minted and can perform
    // sensitive operations like account deletion, or updating their email
    // address or password.

    // The signed-in user info.
    const user = result.user;

    // You can also get the Apple OAuth Access and ID Tokens.
    const credential = OAuthProvider.credentialFromResult(result);
    const accessToken = credential.accessToken;
    const idToken = credential.idToken;

    // ...
  })
  .catch((error) => {
    // Handle Errors here.
    const errorCode = error.code;
    const errorMessage = error.message;
    // The email of the user's account used.
    const email = error.customData.email;
    // The credential that was used.
    const credential = OAuthProvider.credentialFromError(error);

    // ...
  });

Web namespaced API

const provider = new firebase.auth.OAuthProvider('apple.com');

firebase
  .auth()
  .currentUser
  .reauthenticateWithPopup(provider)
  .then((result) => {
    // User is re-authenticated with fresh tokens minted and can perform
    // sensitive operations like account deletion, or updating their email
    // address or password.
    /** @type {firebase.auth.OAuthCredential} */
    var credential = result.credential;

    // The signed-in user info.
    var user = result.user;
     // You can also get the Apple OAuth Access and ID Tokens.
    var accessToken = credential.accessToken;
    var idToken = credential.idToken;

    // IdP data available in result.additionalUserInfo.profile.
      // ...
  })
  .catch((error) => {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    var email = error.email;
    // The firebase.auth.AuthCredential type that was used.
    var credential = error.credential;

    // ...
  });

और, आप विभिन्न पहचान प्रदाताओं को मौजूदा खातों से जोड़ने के लिए linkWithPopup() और linkWithRedirect() का उपयोग कर सकते हैं।

ध्यान दें कि Apple को अपने Apple खातों को अन्य डेटा से लिंक करने से पहले आपको उपयोगकर्ताओं से स्पष्ट सहमति प्राप्त करने की आवश्यकता है।

उदाहरण के लिए, किसी फेसबुक खाते को वर्तमान फायरबेस खाते से लिंक करने के लिए, उपयोगकर्ता को फेसबुक पर साइन इन करने से प्राप्त एक्सेस टोकन का उपयोग करें:

Web modular API

import { getAuth, linkWithPopup, FacebookAuthProvider } from "firebase/auth";

const auth = getAuth();
const provider = new FacebookAuthProvider();
provider.addScope('user_birthday');

// Assuming the current user is an Apple user linking a Facebook provider.
linkWithPopup(auth.currentUser, provider)
    .then((result) => {
      // Facebook credential is linked to the current Apple user.
      // ...

      // The user can now sign in to the same account
      // with either Apple or Facebook.
    })
    .catch((error) => {
      // Handle error.
    });

Web namespaced API

const provider = new firebase.auth.FacebookAuthProvider();
provider.addScope('user_birthday');

// Assuming the current user is an Apple user linking a Facebook provider.
firebase.auth().currentUser.linkWithPopup(provider)
    .then((result) => {
      // Facebook credential is linked to the current Apple user.
      // Facebook additional data available in result.additionalUserInfo.profile,

      // Additional Facebook OAuth access token can also be retrieved.
      // result.credential.accessToken

      // The user can now sign in to the same account
      // with either Apple or Facebook.
    })
    .catch((error) => {
      // Handle error.
    });

Chrome एक्सटेंशन में फ़ायरबेस से प्रमाणित करें

यदि आप Chrome एक्सटेंशन ऐप बना रहे हैं, तो ऑफ़स्क्रीन दस्तावेज़ मार्गदर्शिका देखें।

ध्यान दें कि आपको अभी भी Apple के साथ कस्टम डोमेन को डिफ़ॉल्ट firebaseapp.com डोमेन के समान सत्यापित करना होगा:

http://auth.custom.example.com/.well-known/apple-developer-domain-association.txt

टोकन निरस्तीकरण

ऐप्पल के लिए आवश्यक है कि जो ऐप खाता निर्माण का समर्थन करते हैं, उन्हें उपयोगकर्ताओं को ऐप के भीतर अपना खाता हटाने की अनुमति देनी चाहिए, जैसा कि ऐप स्टोर समीक्षा दिशानिर्देशों में बताया गया है।

इस आवश्यकता को पूरा करने के लिए, निम्नलिखित चरणों को लागू करें:

  1. सुनिश्चित करें कि आपने Apple प्रदाता कॉन्फ़िगरेशन के साथ साइन इन के सेवा आईडी और OAuth कोड प्रवाह कॉन्फ़िगरेशन अनुभाग को भर दिया है, जैसा कि Apple के साथ साइन इन कॉन्फ़िगर करें अनुभाग में बताया गया है।

  2. चूँकि जब उपयोगकर्ता ऐप्पल के साथ साइन इन करते हैं तो फायरबेस उपयोगकर्ता टोकन संग्रहीत नहीं करता है, इसलिए आपको उपयोगकर्ता को उनके टोकन को रद्द करने और खाता हटाने से पहले फिर से साइन इन करने के लिए कहना होगा।

    फिर, OAuthCredential से Apple OAuth एक्सेस टोकन प्राप्त करें, और Apple OAuth एक्सेस टोकन को रद्द करने के लिए revokeAccessToken(auth, token) कॉल करने के लिए इसका उपयोग करें।

    const provider = new OAuthProvider('apple.com');
    provider.addScope('email');
    provider.addScope('name');
    
    const auth = getAuth();
    signInWithPopup(auth, provider).then(result => {
      // Get the Apple OAuth access token.
      const credential = OAuthProvider.credentialFromResult(result);
      const accessToken = credential.accessToken;
    
      // Revoke the Apple OAuth access token.
      revokeAccessToken(auth, accessToken)
        .then(() => {
          // Token revoked.
    
          // Delete the user account.
          // ...
        })
        .catch(error => {
          // An error happened.
          // ...
        });
    });
    
  3. अंत में, उपयोगकर्ता खाता (और सभी संबद्ध डेटा) हटा दें

उन्नत: Node.js में फायरबेस के साथ प्रमाणित करें

Node.js एप्लिकेशन में फ़ायरबेस से प्रमाणित करने के लिए:

  1. उपयोगकर्ता को अपने Apple खाते से साइन इन करें और उपयोगकर्ता का Apple ID टोकन प्राप्त करें। आप इसे कई तरीकों से पूरा कर सकते हैं. उदाहरण के लिए, यदि आपके Node.js ऐप में ब्राउज़र फ्रंट एंड है:

    1. अपने बैकएंड पर, एक यादृच्छिक स्ट्रिंग (एक "नॉनस") उत्पन्न करें और इसके SHA256 हैश की गणना करें। नॉन एक बार उपयोग मूल्य है जिसका उपयोग आप अपने बैकएंड और ऐप्पल के ऑथ सर्वर के बीच एकल राउंड ट्रिप को सत्यापित करने के लिए करते हैं।

      Web modular API

      const crypto = require("crypto");
      const string_decoder = require("string_decoder");
      
      // Generate a new random string for each sign-in
      const generateNonce = (length) => {
        const decoder = new string_decoder.StringDecoder("ascii");
        const buf = Buffer.alloc(length);
        let nonce = "";
        while (nonce.length < length) {
          crypto.randomFillSync(buf);
          nonce = decoder.write(buf);
        }
        return nonce.slice(0, length);
      };
      
      const unhashedNonce = generateNonce(10);
      
      // SHA256-hashed nonce in hex
      const hashedNonceHex = crypto.createHash('sha256')
        .update(unhashedNonce).digest().toString('hex');

      Web namespaced API

      const crypto = require("crypto");
      const string_decoder = require("string_decoder");
      
      // Generate a new random string for each sign-in
      const generateNonce = function(length) {
        const decoder = new string_decoder.StringDecoder("ascii");
        const buf = Buffer.alloc(length);
        var nonce = "";
        while (nonce.length < length) {
          crypto.randomFillSync(buf);
          nonce = decoder.write(buf);
        }
        return nonce.slice(0, length);
      };
      
      const unhashedNonce = generateNonce(10);
      
      // SHA256-hashed nonce in hex
      const hashedNonceHex = crypto.createHash('sha256')
        .update(unhashedNonce).digest().toString('hex');
    2. अपने साइन-इन पृष्ठ पर, Apple कॉन्फ़िगरेशन के साथ अपने साइन इन में हैशेड नॉन निर्दिष्ट करें:

      <script src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
      <div id="appleid-signin" data-color="black" data-border="true" data-type="sign in"></div>
      <script>
          AppleID.auth.init({
              clientId: YOUR_APPLE_CLIENT_ID,
              scope: 'name email',
              redirectURI: URL_TO_YOUR_REDIRECT_HANDLER,  // See the next step.
              state: '[STATE]',  // Optional value that Apple will send back to you
                                 // so you can return users to the same context after
                                 // they sign in.
              nonce: HASHED_NONCE  // The hashed nonce you generated in the previous step.
          });
      </script>
      
    3. पोस्ट किए गए ऑथ रिस्पॉन्स सर्वर-साइड से ऐप्पल आईडी टोकन प्राप्त करें:

      app.post('/redirect', (req, res) => {
        const savedState = req.cookies.__session;
        const code = req.body.code;
        const state = req.body.state;
        const appleIdToken = req.body.id_token;
        if (savedState !== state || !code) {
          res.status(403).send('403: Permission denied');
        } else {
          // Sign in with Firebase using appleIdToken. (See next step).
        }
      });
      

    Apple के साथ साइन इन करने के लिए अपने वेबपेज को कॉन्फ़िगर करना भी देखें।

  2. उपयोगकर्ता का ऐप्पल आईडी टोकन प्राप्त करने के बाद, क्रेडेंशियल ऑब्जेक्ट बनाने के लिए इसका उपयोग करें और फिर क्रेडेंशियल के साथ उपयोगकर्ता में साइन इन करें:

    Web modular API

    import { getAuth, signInWithCredential, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    
    // Build Firebase credential with the Apple ID token.
    const provider = new OAuthProvider('apple.com');
    const authCredential = provider.credential({
      idToken: appleIdToken,
      rawNonce: unhashedNonce,
    });
    
    // Sign in with credential form the Apple user.
    signInWithCredential(auth, authCredential)
      .then((result) => {
        // User signed in.
      })
      .catch((error) => {
        // An error occurred. If error.code == 'auth/missing-or-invalid-nonce',
        // make sure you're sending the SHA256-hashed nonce as a hex string
        // with your request to Apple.
        console.log(error);
      });

    Web namespaced API

    // Build Firebase credential with the Apple ID token.
    const provider = new firebase.auth.OAuthProvider('apple.com');
    const authCredential = provider.credential({
      idToken: appleIdToken,
      rawNonce: unhashedNonce,
    });
    
    // Sign in with credential form the Apple user.
    firebase.auth().signInWithCredential(authCredential)
      .then((result) => {
        // User signed in.
      })
      .catch((error) => {
        // An error occurred. If error.code == 'auth/missing-or-invalid-nonce',
        // make sure you're sending the SHA256-hashed nonce as a hex string
        // with your request to Apple.
        console.log(error);
      });

अगले कदम

किसी उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल्स से लिंक किया जाता है - यानी, उपयोगकर्ता नाम और पासवर्ड, फोन नंबर, या ऑथ प्रदाता जानकारी - जिस उपयोगकर्ता के साथ साइन इन किया जाता है। यह नया खाता आपके फायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत है, और इसका उपयोग आपके प्रोजेक्ट के प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए किया जा सकता है, भले ही उपयोगकर्ता कैसे भी साइन इन करता हो।

  • आपके ऐप्स में, आपके उपयोगकर्ता की प्रामाणिक स्थिति जानने का अनुशंसित तरीका Auth ऑब्जेक्ट पर एक पर्यवेक्षक सेट करना है। फिर आप User ऑब्जेक्ट से उपयोगकर्ता की मूल प्रोफ़ाइल जानकारी प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें.

  • अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी को auth वेरिएबल से प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप किसी मौजूदा उपयोगकर्ता खाते से प्रमाणीकरण प्रदाता क्रेडेंशियल्स को लिंक करके उपयोगकर्ताओं को एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut पर कॉल करें:

Web modular API

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web namespaced API

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});