জাভাস্ক্রিপ্টের সাথে গিটহাব ব্যবহার করে প্রমাণীকরণ করুন

আপনি আপনার অ্যাপে GitHub প্রমাণীকরণ সংহত করে আপনার ব্যবহারকারীদের তাদের GitHub অ্যাকাউন্ট ব্যবহার করে Firebase-এর সাথে প্রমাণীকরণ করতে দিতে পারেন। আপনি সাইন-ইন ফ্লো চালাতে Firebase SDK ব্যবহার করে অথবা ম্যানুয়ালি GitHub OAuth 2.0 ফ্লো চালিয়ে এবং ফলে অ্যাক্সেস টোকেন Firebase-এ পাস করে GitHub প্রমাণীকরণকে একীভূত করতে পারেন।

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

  1. আপনার JavaScript প্রকল্পে Firebase যোগ করুন
  2. Firebase কনসোলে , Auth বিভাগটি খুলুন।
  3. সাইন ইন পদ্ধতি ট্যাবে, GitHub প্রদানকারী সক্ষম করুন।
  4. সেই প্রদানকারীর ডেভেলপার কনসোল থেকে প্রদানকারী কনফিগারেশনে ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট যোগ করুন:
    1. GitHub-এ ডেভেলপার অ্যাপ্লিকেশন হিসেবে আপনার অ্যাপ নিবন্ধন করুন এবং আপনার অ্যাপের OAuth 2.0 ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট পান।
    2. নিশ্চিত করুন যে আপনার Firebase OAuth রিডাইরেক্ট URI (যেমন my-app-12345.firebaseapp.com/__/auth/handler ) আপনার GitHub অ্যাপের কনফিগারেশনে আপনার অ্যাপের সেটিংস পৃষ্ঠায় আপনার অনুমোদন কলব্যাক URL হিসেবে সেট করা আছে।
  5. Save এ ক্লিক করুন।

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

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

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

  1. GitHub প্রদানকারী বস্তুর একটি উদাহরণ তৈরি করুন:
    WebWeb
    import { GithubAuthProvider } from "firebase/auth";
    
    const provider = new GithubAuthProvider();
    var provider = new firebase.auth.GithubAuthProvider();
  2. ঐচ্ছিক : অতিরিক্ত OAuth 2.0 স্কোপগুলি নির্দিষ্ট করুন যা আপনি প্রমাণীকরণ প্রদানকারীর কাছ থেকে অনুরোধ করতে চান৷ একটি সুযোগ যোগ করতে, addScope কল করুন। যেমন:
    WebWeb
    provider.addScope('repo');
    provider.addScope('repo');
    প্রমাণীকরণ প্রদানকারীর ডকুমেন্টেশন দেখুন।
  3. ঐচ্ছিক : অতিরিক্ত কাস্টম OAuth প্রদানকারী প্যারামিটার নির্দিষ্ট করুন যা আপনি OAuth অনুরোধের সাথে পাঠাতে চান। একটি কাস্টম প্যারামিটার যোগ করতে, OAuth প্রদানকারীর ডকুমেন্টেশন এবং সংশ্লিষ্ট মান দ্বারা নির্দিষ্ট করা কী সমন্বিত একটি বস্তু সহ প্রাথমিক প্রদানকারীতে setCustomParameters কল করুন। যেমন:
    WebWeb
    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    সংরক্ষিত প্রয়োজনীয় OAuth প্যারামিটার অনুমোদিত নয় এবং উপেক্ষা করা হবে। আরো বিস্তারিত জানার জন্য প্রমাণীকরণ প্রদানকারীর রেফারেন্স দেখুন।
  4. GitHub প্রদানকারী বস্তু ব্যবহার করে Firebase দিয়ে প্রমাণীকরণ করুন। আপনি আপনার ব্যবহারকারীদের একটি পপ-আপ উইন্ডো খোলার মাধ্যমে বা সাইন-ইন পৃষ্ঠায় পুনঃনির্দেশ করে তাদের GitHub অ্যাকাউন্টগুলির সাথে সাইন ইন করতে অনুরোধ করতে পারেন৷ রিডাইরেক্ট পদ্ধতি মোবাইল ডিভাইসে পছন্দ করা হয়।
    • একটি পপ-আপ উইন্ডো দিয়ে সাইন ইন করতে, signInWithPopup কল করুন:
      WebWeb
      import { getAuth, signInWithPopup, GithubAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a GitHub Access Token. You can use it to access the GitHub API.
          const credential = GithubAuthProvider.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 = GithubAuthProvider.credentialFromError(error);
          // ...
        });
      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a GitHub Access Token. You can use it to access the GitHub 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;
          // ...
        });
      এছাড়াও লক্ষ্য করুন যে আপনি GitHub প্রদানকারীর OAuth টোকেন পুনরুদ্ধার করতে পারেন যা GitHub API ব্যবহার করে অতিরিক্ত ডেটা আনতে ব্যবহার করা যেতে পারে।

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

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

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

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

try {
  // Step 1: User tries to sign in using GitHub.
  let result = await signInWithPopup(getAuth(), new GitHubAuthProvider());
} catch (error) {
  // Step 2: User's email already exists.
  if (error.code === "auth/account-exists-with-different-credential") {
    // The pending GitHub 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 GitHub 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) {
  // ...
}

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

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

সাইন-ইন প্রবাহ ম্যানুয়ালি পরিচালনা করুন

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

  1. বিকাশকারীর ডকুমেন্টেশন অনুসরণ করে আপনার অ্যাপে GitHub প্রমাণীকরণকে একীভূত করুন। GitHub সাইন-ইন প্রবাহের শেষে, আপনি একটি OAuth 2.0 অ্যাক্সেস টোকেন পাবেন।
  2. আপনি যদি একটি Node.js অ্যাপ্লিকেশনে সাইন ইন করতে চান, তাহলে Node.js অ্যাপ্লিকেশনে OAuth অ্যাক্সেস টোকেন পাঠান৷
  3. একজন ব্যবহারকারী GitHub এর সাথে সফলভাবে সাইন ইন করার পরে, একটি Firebase শংসাপত্রের জন্য OAuth 2.0 অ্যাক্সেস টোকেন বিনিময় করুন:
    WebWeb
    import { GithubAuthProvider } from "firebase/auth";
    
    const credential = GithubAuthProvider.credential(token);
    var credential = firebase.auth.GithubAuthProvider.credential(token);
  4. Firebase শংসাপত্র ব্যবহার করে Firebase এর সাথে প্রমাণীকরণ করুন:
    WebWeb
    import { getAuth, signInWithCredential } from "firebase/auth";
    
    // Sign in with the credential from the user.
    const auth = getAuth();
    signInWithCredential(auth, credential)
      .then((result) => {
        // Signed in 
        // ...
      })
      .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;
        // ...
      });
    // Sign in with the credential from the user.
    firebase.auth()
      .signInWithCredential(credential)
      .then((result) => {
        // Signed in 
        // ...
      })
      .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;
        // ...
      });

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

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

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

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

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

  1. Hosting এর জন্য আপনার ডোমেন সেট আপ করার জন্য ধাপ 1 থেকে 3 অনুসরণ করুন। আপনি যখন আপনার ডোমেনের মালিকানা যাচাই করেন, Hosting আপনার কাস্টম ডোমেনের জন্য একটি SSL শংসাপত্রের বিধান করে।
  2. Firebase কনসোলে অনুমোদিত ডোমেনের তালিকায় আপনার কাস্টম ডোমেন যোগ করুন: auth.custom.domain.com
  3. GitHub বিকাশকারী কনসোল বা 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.
});