জাভাস্ক্রিপ্ট দিয়ে অ্যাপল ব্যবহার করে প্রমাণীকরণ করুন

আপনি ফায়ারবেস এসডিকে ব্যবহার করে এন্ড-টু-এন্ড OAuth 2.0 সাইন-ইন ফ্লো সম্পন্ন করার মাধ্যমে আপনার ব্যবহারকারীদের তাদের অ্যাপল আইডি দিয়ে ফায়ারবেসে প্রমাণীকরণের সুযোগ দিতে পারেন।

শুরু করার আগে

Apple ব্যবহার করে ব্যবহারকারীদের সাইন ইন করাতে, প্রথমে Apple-এর ডেভেলপার সাইটে ‘Sign In with Apple’ কনফিগার করুন, তারপর আপনার Firebase প্রোজেক্টের জন্য Apple-কে সাইন-ইন প্রদানকারী হিসেবে সক্রিয় করুন।

অ্যাপল ডেভেলপার প্রোগ্রামে যোগ দিন

‘সাইন ইন উইথ অ্যাপল’ শুধুমাত্র অ্যাপল ডেভেলপার প্রোগ্রামের সদস্যরাই কনফিগার করতে পারেন।

অ্যাপল দিয়ে সাইন ইন কনফিগার করুন

অ্যাপল ডেভেলপার সাইটে, নিম্নলিখিত কাজগুলো করুন:

  1. ‘ওয়েবের জন্য অ্যাপল দিয়ে সাইন ইন কনফিগার করুন’ -এর প্রথম বিভাগে বর্ণিত পদ্ধতি অনুযায়ী আপনার ওয়েবসাইটটিকে আপনার অ্যাপের সাথে সংযুক্ত করুন। অনুরোধ করা হলে, নিম্নলিখিত URL-টিকে একটি রিটার্ন URL হিসেবে নিবন্ধন করুন:

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

    আপনি আপনার ফায়ারবেস প্রজেক্ট আইডি খুঁজে পেতে পারেন Firebase কনসোলের > সাধারণ ট্যাব

    কাজ শেষ হলে আপনার নতুন সার্ভিস আইডিটি লিখে রাখুন, যা পরবর্তী অংশে আপনার প্রয়োজন হবে।

  2. একটি 'সাইন ইন উইথ অ্যাপল' প্রাইভেট কী তৈরি করুন । পরবর্তী বিভাগে আপনার নতুন প্রাইভেট কী এবং কী আইডি প্রয়োজন হবে।
  3. আপনি যদি Firebase Authentication এর এমন কোনো ফিচার ব্যবহার করেন যা ব্যবহারকারীদের ইমেল পাঠায়, যেমন ইমেল লিঙ্ক সাইন-ইন, ইমেল অ্যাড্রেস ভেরিফিকেশন, অ্যাকাউন্ট পরিবর্তনের প্রত্যাহার এবং অন্যান্য, তাহলে Apple প্রাইভেট ইমেল রিলে সার্ভিসটি কনফিগার করুন এবং noreply@ YOUR_FIREBASE_PROJECT_ID .firebaseapp.com (অথবা আপনার কাস্টমাইজড ইমেল টেমপ্লেট ডোমেইন) রেজিস্টার করুন, যাতে Apple, Firebase Authentication দ্বারা প্রেরিত ইমেলগুলিকে বেনামী Apple ইমেল অ্যাড্রেসে রিলে করতে পারে।

সাইন-ইন প্রদানকারী হিসেবে অ্যাপলকে সক্রিয় করুন।

  1. আপনার প্রজেক্টে ফায়ারবেস যোগ করুন
  2. Firebase কনসোলে, Security > Authentication- এ যান।
  3. সাইন-ইন মেথড ট্যাবে, অ্যাপল সাইন-ইন প্রোভাইডারটি সক্রিয় করুন। পূর্ববর্তী বিভাগে আপনার তৈরি করা সার্ভিস আইডিটি উল্লেখ করুন। এছাড়াও, OAuth কোড ফ্লো কনফিগারেশন বিভাগে , আপনার অ্যাপল টিম আইডি এবং পূর্ববর্তী বিভাগে আপনার তৈরি করা প্রাইভেট কী ও কী আইডি উল্লেখ করুন।

অ্যাপলের পরিচয় গোপন রাখার শর্তাবলী মেনে চলুন

সাইন ইন করার সময়, ‘সাইন ইন উইথ অ্যাপল’ ব্যবহারকারীদের তাদের ইমেল ঠিকানা সহ ডেটা গোপন করার বিকল্প দেয়। যে ব্যবহারকারীরা এই বিকল্পটি বেছে নেন, তাদের ইমেল ঠিকানার ডোমেইন হয় privaterelay.appleid.com । আপনি যখন আপনার অ্যাপে ‘সাইন ইন উইথ অ্যাপল’ ব্যবহার করবেন, তখন এই গোপনকৃত অ্যাপল আইডিগুলো সম্পর্কিত অ্যাপলের প্রযোজ্য ডেভেলপার নীতি বা শর্তাবলী আপনাকে অবশ্যই মেনে চলতে হবে।

এর মধ্যে একটি বেনামী Apple ID-র সাথে সরাসরি শনাক্তকারী ব্যক্তিগত তথ্য যুক্ত করার আগে ব্যবহারকারীর প্রয়োজনীয় সম্মতি গ্রহণ করা অন্তর্ভুক্ত। Firebase Authentication ব্যবহার করার সময়, এর মধ্যে নিম্নলিখিত পদক্ষেপগুলি অন্তর্ভুক্ত থাকতে পারে:

  • একটি ইমেল ঠিকানাকে একটি বেনামী অ্যাপল আইডির সাথে লিঙ্ক করুন অথবা এর বিপরীতটিও করুন।
  • একটি ফোন নম্বরকে একটি বেনামী অ্যাপল আইডির সাথে লিঙ্ক করুন অথবা এর বিপরীতটি করুন
  • একটি পরিচয়বিহীন অ্যাপল আইডির সাথে একটি পরিচয়বিহীন সোশ্যাল ক্রেডেনশিয়াল (ফেসবুক, গুগল, ইত্যাদি) লিঙ্ক করুন অথবা এর বিপরীতটি করুন।

উপরের তালিকাটি সম্পূর্ণ নয়। আপনার অ্যাপটি অ্যাপলের শর্তাবলী পূরণ করছে কিনা, তা নিশ্চিত করতে আপনার ডেভেলপার অ্যাকাউন্টের মেম্বারশিপ বিভাগে থাকা অ্যাপল ডেভেলপার প্রোগ্রাম লাইসেন্স চুক্তিটি দেখুন।

Firebase SDK দিয়ে সাইন-ইন প্রক্রিয়াটি পরিচালনা করুন।

আপনি যদি একটি ওয়েব অ্যাপ তৈরি করেন, তবে ব্যবহারকারীদের অ্যাপল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেসে তাদের প্রমাণীকরণের সবচেয়ে সহজ উপায় হলো ফায়ারবেস জাভাস্ক্রিপ্ট এসডিকে (SDK) দিয়ে সম্পূর্ণ সাইন-ইন প্রক্রিয়াটি পরিচালনা করা।

Firebase JavaScript SDK ব্যবহার করে সাইন-ইন প্রক্রিয়াটি পরিচালনা করতে, এই ধাপগুলো অনুসরণ করুন:

  1. সংশ্লিষ্ট প্রোভাইডার আইডি apple.com ব্যবহার করে একটি OAuthProvider- এর ইনস্ট্যান্স তৈরি করুন।

    Web

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

    Web

    var provider = new firebase.auth.OAuthProvider('apple.com');
  2. ঐচ্ছিক: ডিফল্ট স্কোপের বাইরে অতিরিক্ত যে OAuth 2.0 স্কোপগুলো আপনি অথেনটিকেশন প্রোভাইডারের কাছ থেকে অনুরোধ করতে চান, তা নির্দিষ্ট করুন।

    Web

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

    Web

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

    ডিফল্টরূপে, যখন ‘প্রতিটি ইমেল ঠিকানার জন্য একটি অ্যাকাউন্ট’ চালু থাকে, তখন Firebase ইমেল এবং নাম স্কোপের জন্য অনুরোধ করে। আপনি যদি এই সেটিংটি পরিবর্তন করে ‘প্রতিটি ইমেল ঠিকানার জন্য একাধিক অ্যাকাউন্ট’ করেন , তাহলে Firebase অ্যাপলের কাছ থেকে কোনো স্কোপের জন্য অনুরোধ করে না, যদি না আপনি সেগুলি নির্দিষ্ট করে দেন।

  3. ঐচ্ছিক: আপনি যদি অ্যাপলের সাইন-ইন স্ক্রিনটি ইংরেজি ছাড়া অন্য কোনো ভাষায় প্রদর্শন করতে চান, তাহলে locale প্যারামিটারটি সেট করুন। সমর্থিত লোকেলগুলো জানতে ‘ সাইন ইন উইথ অ্যাপল’ ডকুমেন্টেশন দেখুন।

    Web

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

    Web

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });
  4. OAuth প্রোভাইডার অবজেক্ট ব্যবহার করে Firebase-এর সাথে প্রমাণীকরণ করুন। আপনি একটি পপ-আপ উইন্ডো খুলে অথবা সাইন-ইন পৃষ্ঠায় রিডাইরেক্ট করে আপনার ব্যবহারকারীদের তাদের Apple অ্যাকাউন্ট দিয়ে সাইন ইন করতে বলতে পারেন। মোবাইল ডিভাইসের ক্ষেত্রে রিডাইরেক্ট পদ্ধতিটিই বেশি পছন্দনীয়।

    • পপ-আপ উইন্ডো দিয়ে সাইন ইন করতে, signInWithPopup() কল করুন:

      Web

      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

      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

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

    Web

    firebase.auth().signInWithRedirect(provider);

    ব্যবহারকারী সাইন-ইন সম্পন্ন করে পেজে ফিরে আসার পর, আপনি getRedirectResult() কল করে সাইন-ইনের ফলাফল পেতে পারেন:

    Web

    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

    // 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;
    
        // ...
      });

    এখানেই আপনি ত্রুটি শনাক্ত ও সমাধান করতে পারবেন। ত্রুটি কোডগুলোর তালিকার জন্য এপিআই রেফারেন্স দেখুন।

    Firebase Auth দ্বারা সমর্থিত অন্যান্য প্রদানকারীদের থেকে ভিন্ন, Apple ছবির কোনো URL প্রদান করে না।

    এছাড়াও, যখন ব্যবহারকারী অ্যাপের সাথে তাদের ইমেল শেয়ার না করার সিদ্ধান্ত নেন, তখন অ্যাপল সেই ব্যবহারকারীর জন্য একটি অনন্য ইমেল ঠিকানা ( xyz@privaterelay.appleid.com ফর্ম্যাটে) তৈরি করে, যা আপনার অ্যাপের সাথে শেয়ার করা হয়। আপনি যদি প্রাইভেট ইমেল রিলে পরিষেবাটি কনফিগার করে থাকেন, তাহলে অ্যাপল সেই বেনামী ঠিকানায় পাঠানো ইমেলগুলি ব্যবহারকারীর আসল ইমেল ঠিকানায় ফরোয়ার্ড করে দেয়।

    কোনো ব্যবহারকারী প্রথমবার সাইন ইন করার সময়ই অ্যাপল শুধুমাত্র ডিসপ্লে নেমের মতো ব্যবহারকারীর তথ্য অ্যাপগুলোর সাথে শেয়ার করে। সাধারণত, কোনো ব্যবহারকারী প্রথমবার অ্যাপল দিয়ে সাইন ইন করলে ফায়ারবেস ডিসপ্লে নেমটি সংরক্ষণ করে, যা আপনি firebase.auth().currentUser.displayName ব্যবহার করে পেতে পারেন। তবে, আপনি যদি আগে ফায়ারবেস ব্যবহার না করে অ্যাপলের মাধ্যমে কোনো ব্যবহারকারীকে অ্যাপটিতে সাইন ইন করিয়ে থাকেন, তাহলে অ্যাপল ফায়ারবেসকে ব্যবহারকারীর ডিসপ্লে নেমটি সরবরাহ করবে না।

পুনঃপ্রমাণীকরণ এবং অ্যাকাউন্ট লিঙ্কিং

reauthenticateWithPopup() এবং reauthenticateWithRedirect() এর সাথেও একই প্যাটার্ন ব্যবহার করা যেতে পারে, যা আপনি এমন সংবেদনশীল অপারেশনের জন্য একটি নতুন ক্রেডেনশিয়াল পুনরুদ্ধার করতে ব্যবহার করতে পারেন যেগুলোর জন্য সাম্প্রতিক সাইন-ইন প্রয়োজন:

Web

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

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() ব্যবহার করতে পারেন।

মনে রাখবেন যে, ব্যবহারকারীদের অ্যাপল অ্যাকাউন্ট অন্য ডেটার সাথে লিঙ্ক করার আগে অ্যাপল আপনাকে তাদের কাছ থেকে সুস্পষ্ট সম্মতি নিতে বলে।

উদাহরণস্বরূপ, বর্তমান Firebase অ্যাকাউন্টের সাথে একটি Facebook অ্যাকাউন্ট লিঙ্ক করতে, Facebook-এ ব্যবহারকারীকে সাইন ইন করার সময় আপনি যে অ্যাক্সেস টোকেনটি পেয়েছেন তা ব্যবহার করুন:

Web

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

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.
    });

ক্রোম এক্সটেনশনে ফায়ারবেস দিয়ে প্রমাণীকরণ করুন

আপনি যদি একটি ক্রোম এক্সটেনশন অ্যাপ তৈরি করেন, তাহলে অফস্ক্রিন ডকুমেন্টস গাইডটি দেখুন।

মনে রাখবেন যে, ডিফল্ট firebaseapp.com ডোমেনের মতোই আপনাকে কাস্টম ডোমেনটিও অ্যাপলের সাথে যাচাই করতে হবে:

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

টোকেন প্রত্যাহার

অ্যাপ স্টোর রিভিউ নির্দেশিকায় বর্ণিত নিয়ম অনুযায়ী, অ্যাপলের এই শর্ত আরোপ করা হয়েছে যে, যেসব অ্যাপে অ্যাকাউন্ট তৈরির সুবিধা রয়েছে, ব্যবহারকারীদের অবশ্যই অ্যাপের ভেতর থেকেই নিজেদের অ্যাকাউন্ট মুছে ফেলার সুযোগ দিতে হবে।

এই শর্তটি পূরণ করতে, নিম্নলিখিত পদক্ষেপগুলি বাস্তবায়ন করুন:

  1. 'Configure Sign in with Apple' বিভাগে বর্ণিত নির্দেশনা অনুযায়ী, 'Sign in with Apple' প্রোভাইডার কনফিগারেশনের সার্ভিসেস আইডি এবং OAuth কোড ফ্লো কনফিগারেশন বিভাগটি আপনি পূরণ করেছেন কিনা, তা নিশ্চিত করুন।

  2. যেহেতু 'সাইন ইন উইথ অ্যাপল' ব্যবহার করে ব্যবহারকারী তৈরি করার সময় Firebase ব্যবহারকারীর টোকেন সংরক্ষণ করে না, তাই তাদের টোকেন বাতিল করার এবং অ্যাকাউন্টটি মুছে ফেলার আগে আপনাকে অবশ্যই ব্যবহারকারীকে পুনরায় সাইন ইন করতে বলতে হবে।

    এরপর, 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-এ Firebase দিয়ে প্রমাণীকরণ

Node.js অ্যাপ্লিকেশনে Firebase-এর সাথে প্রমাণীকরণ করতে:

  1. ব্যবহারকারীকে তার অ্যাপল অ্যাকাউন্ট দিয়ে সাইন ইন করান এবং তার অ্যাপল আইডি টোকেনটি সংগ্রহ করুন। আপনি এটি বিভিন্ন উপায়ে করতে পারেন। উদাহরণস্বরূপ, যদি আপনার Node.js অ্যাপটির একটি ব্রাউজার ফ্রন্ট এন্ড থাকে:

    1. আপনার ব্যাকএন্ডে, একটি র‍্যান্ডম স্ট্রিং ("নন্স") তৈরি করুন এবং এর SHA256 হ্যাশ গণনা করুন। নন্স হলো একটি একবার ব্যবহারযোগ্য ভ্যালু, যা আপনি আপনার ব্যাকএন্ড এবং অ্যাপলের অথেন্টিকেশন সার্ভারের মধ্যে একটিমাত্র রাউন্ড ট্রিপ যাচাই করার জন্য ব্যবহার করেন।

      Web

      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

      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. আপনার সাইন-ইন পৃষ্ঠায়, 'Sign In with 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. সার্ভার-সাইডে POST করা অথেন্টিকেশন রেসপন্স থেকে Apple ID টোকেনটি নিন:

      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).
        }
      });
      

    এছাড়াও দেখুন ‘অ্যাপল দিয়ে সাইন ইন’-এর জন্য আপনার ওয়েবপেজ কনফিগার করা’

  2. ব্যবহারকারীর অ্যাপল আইডি টোকেন পাওয়ার পর, সেটি ব্যবহার করে একটি ক্রেডেনশিয়াল অবজেক্ট তৈরি করুন এবং তারপর সেই ক্রেডেনশিয়াল দিয়ে ব্যবহারকারীকে সাইন ইন করান:

    Web

    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

    // 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 অবজেক্ট থেকে ব্যবহারকারীর প্রাথমিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারী ব্যবস্থাপনা (Manage Users) দেখুন।

  • আপনার Firebase Realtime Database and Cloud Storage Security Rules- এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ইউজার আইডি পেতে পারেন এবং একজন ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

বিদ্যমান কোনো ব্যবহারকারী অ্যাকাউন্টের সাথে অথেন্টিকেশন প্রোভাইডারের ক্রেডেনশিয়াল লিঙ্ক করার মাধ্যমে আপনি ব্যবহারকারীদের একাধিক অথেন্টিকেশন প্রোভাইডার ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন।

কোনো ব্যবহারকারীকে সাইন আউট করতে, signOut কল করুন:

Web

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

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

Web

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