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

আপনি আপনার ব্যবহারকারীদের তাদের Google অ্যাকাউন্ট ব্যবহার করে Firebase এর সাথে প্রমাণীকরণ করতে দিতে পারেন। আপনি হয় Firebase SDK ব্যবহার করে Google সাইন-ইন ফ্লো চালাতে পারেন, অথবা সাইন-ইন ফ্লো ম্যানুয়ালি Google লাইব্রেরি দিয়ে সাইন ইন ব্যবহার করতে পারেন এবং এর ফলে আইডি টোকেন Firebase-এ পাঠাতে পারেন।

আপনি শুরু করার আগে

  1. আপনার JavaScript প্রকল্পে Firebase যোগ করুন
  2. Firebase কনসোলে একটি সাইন-ইন পদ্ধতি হিসাবে Google সক্ষম করুন:
    1. Firebase কনসোলে , Auth বিভাগটি খুলুন।
    2. সাইন ইন পদ্ধতি ট্যাবে, Google সাইন-ইন পদ্ধতি সক্ষম করুন এবং সংরক্ষণ করুন ক্লিক করুন৷

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

আপনি যদি একটি ওয়েব অ্যাপ তৈরি করেন, তাহলে আপনার ব্যবহারকারীদের Google অ্যাকাউন্ট ব্যবহার করে Firebase-এর মাধ্যমে প্রমাণীকরণ করার সবচেয়ে সহজ উপায় হল Firebase JavaScript SDK-এর মাধ্যমে সাইন-ইন প্রবাহ পরিচালনা করা। (যদি আপনি Node.js বা অন্য অ-ব্রাউজার পরিবেশে একজন ব্যবহারকারীকে প্রমাণীকরণ করতে চান, তাহলে আপনাকে অবশ্যই সাইন-ইন প্রবাহটি ম্যানুয়ালি পরিচালনা করতে হবে।)

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

  1. Google প্রদানকারী বস্তুর একটি উদাহরণ তৈরি করুন:
    WebWeb
    import { GoogleAuthProvider } from "firebase/auth";
    
    const provider = new GoogleAuthProvider();
    var provider = new firebase.auth.GoogleAuthProvider();
  2. ঐচ্ছিক : অতিরিক্ত OAuth 2.0 স্কোপগুলি নির্দিষ্ট করুন যা আপনি প্রমাণীকরণ প্রদানকারীর কাছ থেকে অনুরোধ করতে চান৷ একটি সুযোগ যোগ করতে, addScope কল করুন। যেমন:
    WebWeb
    provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
    provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
    প্রমাণীকরণ প্রদানকারীর ডকুমেন্টেশন দেখুন।
  3. ঐচ্ছিক : প্রাসঙ্গিক কাস্টম OAuth প্যারামিটারগুলি স্পষ্টভাবে পাস না করেই ব্যবহারকারীর পছন্দের ভাষায় প্রদানকারীর OAuth প্রবাহকে স্থানীয়করণ করতে, OAuth প্রবাহ শুরু করার আগে Auth উদাহরণে ভাষা কোড আপডেট করুন। যেমন:
    WebWeb
    import { getAuth } from "firebase/auth";
    
    const auth = getAuth();
    auth.languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // auth.useDeviceLanguage();
    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  4. ঐচ্ছিক : অতিরিক্ত কাস্টম OAuth প্রদানকারী প্যারামিটার নির্দিষ্ট করুন যা আপনি OAuth অনুরোধের সাথে পাঠাতে চান। একটি কাস্টম প্যারামিটার যোগ করতে, OAuth প্রদানকারীর ডকুমেন্টেশন এবং সংশ্লিষ্ট মান দ্বারা নির্দিষ্ট করা কী সমন্বিত একটি বস্তু সহ প্রাথমিক প্রদানকারীতে setCustomParameters কল করুন। যেমন:
    WebWeb
    provider.setCustomParameters({
      'login_hint': 'user@example.com'
    });
    provider.setCustomParameters({
      'login_hint': 'user@example.com'
    });
    সংরক্ষিত প্রয়োজনীয় OAuth প্যারামিটার অনুমোদিত নয় এবং উপেক্ষা করা হবে। আরো বিস্তারিত জানার জন্য প্রমাণীকরণ প্রদানকারীর রেফারেন্স দেখুন।
  5. Google প্রদানকারী অবজেক্ট ব্যবহার করে Firebase দিয়ে প্রমাণীকরণ করুন। আপনি আপনার ব্যবহারকারীদের একটি পপ-আপ উইন্ডো খোলার মাধ্যমে বা সাইন-ইন পৃষ্ঠায় পুনঃনির্দেশ করে তাদের Google অ্যাকাউন্টে সাইন ইন করতে অনুরোধ করতে পারেন৷ রিডাইরেক্ট পদ্ধতি মোবাইল ডিভাইসে পছন্দ করা হয়।
    • একটি পপ-আপ উইন্ডো দিয়ে সাইন ইন করতে, signInWithPopup কল করুন:
      WebWeb
      import { getAuth, signInWithPopup, GoogleAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a Google Access Token. You can use it to access the Google API.
          const credential = GoogleAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          // The signed-in user info.
          const user = result.user;
          // 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 AuthCredential type that was used.
          const credential = GoogleAuthProvider.credentialFromError(error);
          // ...
        });
      firebase.auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a Google Access Token. You can use it to access the Google API.
          var token = credential.accessToken;
          // The signed-in user info.
          var user = result.user;
          // 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;
          // ...
        });
      এছাড়াও লক্ষ্য করুন যে আপনি Google প্রদানকারীর OAuth টোকেন পুনরুদ্ধার করতে পারেন যা Google API ব্যবহার করে অতিরিক্ত ডেটা আনতে ব্যবহার করা যেতে পারে।

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

    • সাইন-ইন পৃষ্ঠায় পুনঃনির্দেশ করে সাইন ইন করতে, signInWithRedirect কল করুন : `signInWithRedirect` ব্যবহার করার সময় সর্বোত্তম অনুশীলনগুলি অনুসরণ করুন৷
      WebWeb
      import { getAuth, signInWithRedirect } from "firebase/auth";
      
      const auth = getAuth();
      signInWithRedirect(auth, provider);
      firebase.auth().signInWithRedirect(provider);
      তারপর, আপনার পৃষ্ঠা লোড হলে getRedirectResult কল করে আপনি Google প্রদানকারীর OAuth টোকেন পুনরুদ্ধার করতে পারেন:
      WebWeb
      import { getAuth, getRedirectResult, GoogleAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a Google Access Token. You can use it to access Google APIs.
          const credential = GoogleAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
      
          // The signed-in user info.
          const user = result.user;
          // 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 AuthCredential type that was used.
          const credential = GoogleAuthProvider.credentialFromError(error);
          // ...
        });
      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a Google Access Token. You can use it to access the Google API.
            var token = credential.accessToken;
            // ...
          }
          // The signed-in user info.
          var user = result.user;
          // 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;
          // ...
        });
      এটিও যেখানে আপনি ত্রুটিগুলি ধরতে এবং পরিচালনা করতে পারেন৷ ত্রুটি কোডের একটি তালিকার জন্য প্রমাণীকরণ রেফারেন্স ডক্স দেখুন।

আপনি যদি Firebase কনসোলে প্রতি ইমেল ঠিকানা সেটিং-এ একটি অ্যাকাউন্ট সক্ষম করে থাকেন, যখন একজন ব্যবহারকারী একটি প্রদানকারীতে (যেমন Google) সাইন ইন করার চেষ্টা করে এমন একটি ইমেল দিয়ে যা ইতিমধ্যেই অন্য Firebase ব্যবহারকারীর প্রদানকারীর (যেমন Facebook) জন্য বিদ্যমান, ত্রুটি auth/account-exists-with-different-credential একটি AuthCredential অবজেক্ট (Google ID টোকেন) সহ নিক্ষেপ করা হয়। উদ্দেশ্যপ্রণোদিত প্রদানকারীতে সাইন ইন সম্পূর্ণ করতে, ব্যবহারকারীকে প্রথমে বিদ্যমান প্রদানকারীর (Facebook) সাথে সাইন ইন করতে হবে এবং তারপর প্রাক্তন AuthCredential (Google ID টোকেন) এর সাথে লিঙ্ক করতে হবে।

আপনি যদি signInWithPopup ব্যবহার করেন, তাহলে আপনি নিম্নলিখিত উদাহরণের মতো কোড সহ auth/account-exists-with-different-credential ত্রুটিগুলি পরিচালনা করতে পারেন:

import {
  getAuth,
  linkWithCredential,
  signInWithPopup,
  GoogleAuthProvider,
} from "firebase/auth";

try {
  // Step 1: User tries to sign in using Google.
  let result = await signInWithPopup(getAuth(), new GoogleAuthProvider());
} catch (error) {
  // Step 2: User's email already exists.
  if (error.code === "auth/account-exists-with-different-credential") {
    // The pending Google credential.
    let pendingCred = error.credential;

    // Step 3: Save the pending credential in temporary storage,

    // Step 4: Let the user know that they already have an account
    // but with a different provider, and let them choose another
    // sign-in method.
  }
}

// ...

try {
  // Step 5: Sign the user in using their chosen method.
  let result = await signInWithPopup(getAuth(), userSelectedProvider);

  // Step 6: Link to the Google credential.
  // TODO: implement `retrievePendingCred` for your app.
  let pendingCred = retrievePendingCred();

  if (pendingCred !== null) {
    // As you have access to the pending credential, you can directly call the
    // link method.
    let user = await linkWithCredential(result.user, pendingCred);
  }

  // Step 7: Continue to app.
} catch (error) {
  // ...
}

রিডাইরেক্ট মোড

এই ত্রুটিটি পুনঃনির্দেশ মোডে একইভাবে পরিচালনা করা হয়, পৃষ্ঠা পুনঃনির্দেশের মধ্যে (উদাহরণস্বরূপ, সেশন স্টোরেজ ব্যবহার করে) মুলতুবি থাকা শংসাপত্রটি ক্যাশ করতে হয়।

এছাড়াও আপনি Google লাইব্রেরির সাথে সাইন ইন করে সাইন-ইন ফ্লো পরিচালনা করে একটি Google অ্যাকাউন্ট ব্যবহার করে Firebase-এর সাথে প্রমাণীকরণ করতে পারেন:

  1. ইন্টিগ্রেশন গাইড অনুসরণ করে আপনার অ্যাপে Google-এর সাথে সাইন ইন ইন্টিগ্রেট করুন। আপনার Firebase প্রকল্পের জন্য তৈরি করা Google ক্লায়েন্ট আইডি দিয়ে Google সাইন-ইন কনফিগার করতে ভুলবেন না। আপনি আপনার প্রকল্পের বিকাশকারী কনসোল শংসাপত্র পৃষ্ঠায় আপনার প্রকল্পের Google ক্লায়েন্ট আইডি খুঁজে পেতে পারেন।
  2. সাইন-ইন ফলাফল কলব্যাকে, একটি Firebase শংসাপত্রের জন্য Google প্রমাণীকরণ প্রতিক্রিয়া থেকে ID টোকেন বিনিময় করুন এবং Firebase এর সাথে প্রমাণীকরণ করতে এটি ব্যবহার করুন:
    function handleCredentialResponse(response) {
      // Build Firebase credential with the Google ID token.
      const idToken = response.credential;
      const credential = GoogleAuthProvider.credential(idToken);
    
      // Sign in with credential from the Google user.
      signInWithCredential(auth, credential).catch((error) => {
        // Handle Errors here.
        const errorCode = error.code;
        const errorMessage = error.message;
        // The email of the user's account used.
        const email = error.email;
        // The credential that was used.
        const credential = GoogleAuthProvider.credentialFromError(error);
        // ...
      });
    }

একটি Node.js অ্যাপ্লিকেশনে ফায়ারবেসের সাথে প্রমাণীকরণ করতে:

  1. ব্যবহারকারীকে তাদের Google অ্যাকাউন্ট দিয়ে সাইন ইন করুন এবং ব্যবহারকারীর Google ID টোকেন পান৷ আপনি এটি বিভিন্ন উপায়ে সম্পন্ন করতে পারেন। যেমন:
  2. আপনি ব্যবহারকারীর Google আইডি টোকেন পাওয়ার পরে, একটি শংসাপত্র বস্তু তৈরি করতে এটি ব্যবহার করুন এবং তারপরে শংসাপত্রের সাথে ব্যবহারকারীকে সাইন ইন করুন:
    WebWeb
    import { getAuth, signInWithCredential, GoogleAuthProvider } from "firebase/auth";
    
    // Build Firebase credential with the Google ID token.
    const credential = GoogleAuthProvider.credential(id_token);
    
    // Sign in with credential from the Google user.
    const auth = getAuth();
    signInWithCredential(auth, credential).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 AuthCredential type that was used.
      const credential = GoogleAuthProvider.credentialFromError(error);
      // ...
    });
    // Build Firebase credential with the Google ID token.
    var credential = firebase.auth.GoogleAuthProvider.credential(id_token);
    
    // Sign in with credential from the Google user.
    firebase.auth().signInWithCredential(credential).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;
      // ...
    });

একটি Chrome এক্সটেনশনে Firebase দিয়ে প্রমাণীকরণ করুন

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

প্রকল্প তৈরির সময়, Firebase আপনার প্রকল্পের জন্য একটি অনন্য সাবডোমেনের ব্যবস্থা করবে: https://my-app-12345.firebaseapp.com

এটি OAuth সাইন ইনের জন্য পুনঃনির্দেশ প্রক্রিয়া হিসাবেও ব্যবহার করা হবে৷ সমস্ত সমর্থিত OAuth প্রদানকারীদের জন্য সেই ডোমেনটিকে অনুমতি দেওয়া প্রয়োজন৷ যাইহোক, এর মানে হল যে ব্যবহারকারীরা সেই ডোমেনটি Google-এ সাইন ইন করার সময় অ্যাপ্লিকেশনটিতে পুনঃনির্দেশ করার আগে দেখতে পারে: এখানে চালিয়ে যান: https://my-app-12345.firebaseapp.com

আপনার সাবডোমেন প্রদর্শন এড়াতে, আপনি Firebase Hosting এর সাথে একটি কাস্টম ডোমেন সেট আপ করতে পারেন:

  1. Hosting এর জন্য আপনার ডোমেন সেট আপ করার জন্য ধাপ 1 থেকে 3 অনুসরণ করুন। আপনি যখন আপনার ডোমেনের মালিকানা যাচাই করেন, Hosting আপনার কাস্টম ডোমেনের জন্য একটি SSL শংসাপত্রের বিধান করে।
  2. Firebase কনসোলে অনুমোদিত ডোমেনের তালিকায় আপনার কাস্টম ডোমেন যোগ করুন: auth.custom.domain.com
  3. Google বিকাশকারী কনসোল বা OAuth সেটআপ পৃষ্ঠায়, পুনঃনির্দেশিত পৃষ্ঠার URLটিকে সাদা তালিকাভুক্ত করুন, যা আপনার কাস্টম ডোমেনে অ্যাক্সেসযোগ্য হবে: https://auth.custom.domain.com/__/auth/handler
  4. আপনি যখন জাভাস্ক্রিপ্ট লাইব্রেরি আরম্ভ করেন, তখন authDomain ফিল্ডের সাথে আপনার কাস্টম ডোমেন নির্দিষ্ট করুন:
    var config = {
      apiKey: '...',
      // Changed from 'PROJECT_ID.firebaseapp.com'.
      authDomain: 'auth.custom.domain.com',
      databaseURL: 'https://PROJECT_ID.firebaseio.com',
      projectId: 'PROJECT_ID',
      storageBucket: 'PROJECT_ID.firebasestorage.app',
      messagingSenderId: 'SENDER_ID'
    };
    firebase.initializeApp(config);

পরবর্তী পদক্ষেপ

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

  • আপনার অ্যাপে, আপনার ব্যবহারকারীর প্রমাণীকরণের স্থিতি জানার প্রস্তাবিত উপায় হল Auth অবজেক্টে একজন পর্যবেক্ষক সেট করা। তারপর আপনি User অবজেক্ট থেকে ব্যবহারকারীর মৌলিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারীদের পরিচালনা দেখুন।

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

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

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

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

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