āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻ—āĻŋāϟāĻšāĻžāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ 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. āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ.

Firebase SDK āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ-āχāύ āĻĢā§āϞ⧋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Firebase JavaScript SDK-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻžāĨ¤ (āϝāĻĻāĻŋ āφāĻĒāύāĻŋ Node.js āĻŦāĻž āĻ…āĻ¨ā§āϝ āĻ…-āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšāϟāĻŋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤)

Firebase JavaScript SDK āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇, āĻāχ āϧāĻžāĻĒāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ:

  1. GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦāĻ¸ā§āϤ⧁āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ:

    Web

    import { GithubAuthProvider } from "firebase/auth";
    
    const provider = new GithubAuthProvider();

    Web

    var provider = new firebase.auth.GithubAuthProvider();
  2. āϐāĻšā§āĻ›āĻŋāĻ• : āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ OAuth 2.0 āĻ¸ā§āϕ⧋āĻĒāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āϚāĻžāύ⧎ āĻāĻ•āϟāĻŋ āϏ⧁āϝ⧋āĻ— āϝ⧋āĻ— āĻ•āϰāϤ⧇, addScope āĻ•āϞ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻŽāύ:

    Web

    provider.addScope('repo');

    Web

    provider.addScope('repo');
    āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĻ⧇āϖ⧁āύāĨ¤
  3. āϐāĻšā§āĻ›āĻŋāĻ• : āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻžāĻ¸ā§āϟāĻŽ OAuth āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ OAuth āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāĻžāĻ āĻžāϤ⧇ āϚāĻžāύāĨ¤ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϝ⧋āĻ— āĻ•āϰāϤ⧇, OAuth āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻŽāĻžāύ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻž āϕ⧀ āϏāĻŽāĻ¨ā§āĻŦāĻŋāϤ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϏāĻš āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϤ⧇ setCustomParameters āĻ āĻ•āϞ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻŽāύ:

    Web

    provider.setCustomParameters({
      'allow_signup': 'false'
    });

    Web

    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ OAuth āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āύāϝāĻŧ āĻāĻŦāĻ‚ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āφāϰ⧋ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤
  4. GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦāĻ¸ā§āϤ⧁ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύāĨ¤ āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒāĻĒ-āφāĻĒ āωāχāĻ¨ā§āĻĄā§‹ āĻ–ā§‹āϞāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦāĻž āϏāĻžāχāύ-āχāύ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ āĻĒ⧁āύāσāύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āϤāĻžāĻĻ⧇āϰ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻĒāĻĻā§āϧāϤāĻŋ āĻŽā§‹āĻŦāĻžāχāϞ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
    • āĻāĻ•āϟāĻŋ āĻĒāĻĒ-āφāĻĒ āωāχāĻ¨ā§āĻĄā§‹ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇, signInWithPopup āĻ•āϞ āĻ•āϰ⧁āύ:

      Web

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

      Web

      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` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āĻ…āύ⧁āĻļā§€āϞāύāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ⧎

      Web

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

      Web

      firebase.auth().signInWithRedirect(provider);
      āϤāĻžāϰāĻĒāϰ, āφāĻĒāύāĻžāϰ āĻĒ⧃āĻˇā§āĻ āĻž āϞ⧋āĻĄ āĻšāϞ⧇ getRedirectResult āĻ•āϞ āĻ•āϰ⧇ āφāĻĒāύāĻŋ GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ OAuth āĻŸā§‹āϕ⧇āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

      Web

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

      Web

      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;
          // ...
        });
      āĻāϟāĻŋāĻ“ āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋāϗ⧁āϞāĻŋ āϧāϰāϤ⧇ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āĻ¤ā§āϰ⧁āϟāĻŋ āϕ⧋āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĄāĻ•ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤

āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āφāĻĒāύāĻŋ GitHub OAuth 2.0 āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āĻ•āϞ āĻ•āϰ⧇ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

  1. āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ GitHub āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖāϕ⧇ āĻāϕ⧀āĻ­ā§‚āϤ āĻ•āϰ⧁āύāĨ¤ GitHub āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āĻļ⧇āώ⧇, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāĻŦ⧇āύāĨ¤
  2. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ Node.js āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ Node.js āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ OAuth āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāĻ āĻžāύ⧎
  3. āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ GitHub āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ⧇āϰ āϜāĻ¨ā§āϝ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻŦāĻŋāύāĻŋāĻŽāϝāĻŧ āĻ•āϰ⧁āύ:

    Web

    import { GithubAuthProvider } from "firebase/auth";
    
    const credential = GithubAuthProvider.credential(token);

    Web

    var credential = firebase.auth.GithubAuthProvider.credential(token);
  4. Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύ:

    Web

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

    Web

    // 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 āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āĻ…āĻĢāĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟāϏ āĻ—āĻžāχāĻĄ āĻĻ⧇āϖ⧁āύāĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ

āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ—āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϤāĻĨā§āϝ — āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āϛ⧇āύāĨ¤ āĻāχ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ āύāĻž āϕ⧇āύ, āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…ā§āϝāĻžāĻĒ āϜ⧁āĻĄāĻŧ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

  • āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇, āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāϪ⧇āϰ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āϜāĻžāύāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Auth āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻāĻ•āϜāύ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻ• āϏ⧇āϟ āĻ•āϰāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ āφāĻĒāύāĻŋ User āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽā§ŒāϞāĻŋāĻ• āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āϤāĻĨā§āϝ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻĻ⧇āϖ⧁āύāĨ¤

  • āφāĻĒāύāĻžāϰ Firebase Realtime Database āĻāĻŦāĻ‚ Cloud Storage āϏ⧁āϰāĻ•ā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§‡ , āφāĻĒāύāĻŋ 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.
});
,

āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ 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. āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ.

Firebase SDK āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ-āχāύ āĻĢā§āϞ⧋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Firebase JavaScript SDK-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻžāĨ¤ (āϝāĻĻāĻŋ āφāĻĒāύāĻŋ Node.js āĻŦāĻž āĻ…āĻ¨ā§āϝ āĻ…-āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšāϟāĻŋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤)

Firebase JavaScript SDK āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇, āĻāχ āϧāĻžāĻĒāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ:

  1. GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦāĻ¸ā§āϤ⧁āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ:

    Web

    import { GithubAuthProvider } from "firebase/auth";
    
    const provider = new GithubAuthProvider();

    Web

    var provider = new firebase.auth.GithubAuthProvider();
  2. āϐāĻšā§āĻ›āĻŋāĻ• : āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ OAuth 2.0 āĻ¸ā§āϕ⧋āĻĒāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āϚāĻžāύ⧎ āĻāĻ•āϟāĻŋ āϏ⧁āϝ⧋āĻ— āϝ⧋āĻ— āĻ•āϰāϤ⧇, addScope āĻ•āϞ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻŽāύ:

    Web

    provider.addScope('repo');

    Web

    provider.addScope('repo');
    āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĻ⧇āϖ⧁āύāĨ¤
  3. āϐāĻšā§āĻ›āĻŋāĻ• : āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻžāĻ¸ā§āϟāĻŽ OAuth āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ OAuth āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāĻžāĻ āĻžāϤ⧇ āϚāĻžāύāĨ¤ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϝ⧋āĻ— āĻ•āϰāϤ⧇, OAuth āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻŽāĻžāύ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻž āϕ⧀ āϏāĻŽāĻ¨ā§āĻŦāĻŋāϤ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϏāĻš āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϤ⧇ setCustomParameters āĻ āĻ•āϞ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻŽāύ:

    Web

    provider.setCustomParameters({
      'allow_signup': 'false'
    });

    Web

    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ OAuth āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āύāϝāĻŧ āĻāĻŦāĻ‚ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āφāϰ⧋ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤
  4. GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦāĻ¸ā§āϤ⧁ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύāĨ¤ āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒāĻĒ-āφāĻĒ āωāχāĻ¨ā§āĻĄā§‹ āĻ–ā§‹āϞāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦāĻž āϏāĻžāχāύ-āχāύ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ āĻĒ⧁āύāσāύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āϤāĻžāĻĻ⧇āϰ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻĒāĻĻā§āϧāϤāĻŋ āĻŽā§‹āĻŦāĻžāχāϞ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
    • āĻāĻ•āϟāĻŋ āĻĒāĻĒ-āφāĻĒ āωāχāĻ¨ā§āĻĄā§‹ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇, signInWithPopup āĻ•āϞ āĻ•āϰ⧁āύ:

      Web

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

      Web

      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` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āĻ…āύ⧁āĻļā§€āϞāύāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ⧎

      Web

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

      Web

      firebase.auth().signInWithRedirect(provider);
      āϤāĻžāϰāĻĒāϰ, āφāĻĒāύāĻžāϰ āĻĒ⧃āĻˇā§āĻ āĻž āϞ⧋āĻĄ āĻšāϞ⧇ getRedirectResult āĻ•āϞ āĻ•āϰ⧇ āφāĻĒāύāĻŋ GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ OAuth āĻŸā§‹āϕ⧇āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

      Web

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

      Web

      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;
          // ...
        });
      āĻāϟāĻŋāĻ“ āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋāϗ⧁āϞāĻŋ āϧāϰāϤ⧇ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āĻ¤ā§āϰ⧁āϟāĻŋ āϕ⧋āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĄāĻ•ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤

āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āφāĻĒāύāĻŋ GitHub OAuth 2.0 āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āĻ•āϞ āĻ•āϰ⧇ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

  1. āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ GitHub āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖāϕ⧇ āĻāϕ⧀āĻ­ā§‚āϤ āĻ•āϰ⧁āύāĨ¤ GitHub āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āĻļ⧇āώ⧇, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāĻŦ⧇āύāĨ¤
  2. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ Node.js āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ Node.js āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ OAuth āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāĻ āĻžāύ⧎
  3. āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ GitHub āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ⧇āϰ āϜāĻ¨ā§āϝ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻŦāĻŋāύāĻŋāĻŽāϝāĻŧ āĻ•āϰ⧁āύ:

    Web

    import { GithubAuthProvider } from "firebase/auth";
    
    const credential = GithubAuthProvider.credential(token);

    Web

    var credential = firebase.auth.GithubAuthProvider.credential(token);
  4. Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύ:

    Web

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

    Web

    // 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 āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āĻ…āĻĢāĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟāϏ āĻ—āĻžāχāĻĄ āĻĻ⧇āϖ⧁āύāĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ

āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ—āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϤāĻĨā§āϝ — āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āϛ⧇āύāĨ¤ āĻāχ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ āύāĻž āϕ⧇āύ, āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…ā§āϝāĻžāĻĒ āϜ⧁āĻĄāĻŧ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

  • āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇, āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāϪ⧇āϰ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āϜāĻžāύāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Auth āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻāĻ•āϜāύ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻ• āϏ⧇āϟ āĻ•āϰāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ āφāĻĒāύāĻŋ User āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽā§ŒāϞāĻŋāĻ• āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āϤāĻĨā§āϝ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻĻ⧇āϖ⧁āύāĨ¤

  • āφāĻĒāύāĻžāϰ Firebase Realtime Database āĻāĻŦāĻ‚ Cloud Storage āϏ⧁āϰāĻ•ā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§‡ , āφāĻĒāύāĻŋ 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.
});
,

āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ 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. āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ.

Firebase SDK āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ-āχāύ āĻĢā§āϞ⧋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Firebase JavaScript SDK-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻžāĨ¤ (āϝāĻĻāĻŋ āφāĻĒāύāĻŋ Node.js āĻŦāĻž āĻ…āĻ¨ā§āϝ āĻ…-āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšāϟāĻŋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤)

Firebase JavaScript SDK āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇, āĻāχ āϧāĻžāĻĒāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ:

  1. GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦāĻ¸ā§āϤ⧁āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ:

    Web

    import { GithubAuthProvider } from "firebase/auth";
    
    const provider = new GithubAuthProvider();

    Web

    var provider = new firebase.auth.GithubAuthProvider();
  2. āϐāĻšā§āĻ›āĻŋāĻ• : āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ OAuth 2.0 āĻ¸ā§āϕ⧋āĻĒāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āϚāĻžāύ⧎ āĻāĻ•āϟāĻŋ āϏ⧁āϝ⧋āĻ— āϝ⧋āĻ— āĻ•āϰāϤ⧇, addScope āĻ•āϞ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻŽāύ:

    Web

    provider.addScope('repo');

    Web

    provider.addScope('repo');
    āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĻ⧇āϖ⧁āύāĨ¤
  3. āϐāĻšā§āĻ›āĻŋāĻ• : āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻžāĻ¸ā§āϟāĻŽ OAuth āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ OAuth āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāĻžāĻ āĻžāϤ⧇ āϚāĻžāύāĨ¤ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϝ⧋āĻ— āĻ•āϰāϤ⧇, OAuth āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻŽāĻžāύ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻž āϕ⧀ āϏāĻŽāĻ¨ā§āĻŦāĻŋāϤ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϏāĻš āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϤ⧇ setCustomParameters āĻ āĻ•āϞ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻŽāύ:

    Web

    provider.setCustomParameters({
      'allow_signup': 'false'
    });

    Web

    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ OAuth āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āύāϝāĻŧ āĻāĻŦāĻ‚ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āφāϰ⧋ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤
  4. GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦāĻ¸ā§āϤ⧁ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύāĨ¤ āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒāĻĒ-āφāĻĒ āωāχāĻ¨ā§āĻĄā§‹ āĻ–ā§‹āϞāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦāĻž āϏāĻžāχāύ-āχāύ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ āĻĒ⧁āύāσāύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āϤāĻžāĻĻ⧇āϰ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻĒāĻĻā§āϧāϤāĻŋ āĻŽā§‹āĻŦāĻžāχāϞ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
    • āĻāĻ•āϟāĻŋ āĻĒāĻĒ-āφāĻĒ āωāχāĻ¨ā§āĻĄā§‹ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇, signInWithPopup āĻ•āϞ āĻ•āϰ⧁āύ:

      Web

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

      Web

      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` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āĻ…āύ⧁āĻļā§€āϞāύāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ⧎

      Web

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

      Web

      firebase.auth().signInWithRedirect(provider);
      āϤāĻžāϰāĻĒāϰ, āφāĻĒāύāĻžāϰ āĻĒ⧃āĻˇā§āĻ āĻž āϞ⧋āĻĄ āĻšāϞ⧇ getRedirectResult āĻ•āϞ āĻ•āϰ⧇ āφāĻĒāύāĻŋ GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ OAuth āĻŸā§‹āϕ⧇āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

      Web

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

      Web

      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;
          // ...
        });
      āĻāϟāĻŋāĻ“ āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋāϗ⧁āϞāĻŋ āϧāϰāϤ⧇ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āĻ¤ā§āϰ⧁āϟāĻŋ āϕ⧋āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĄāĻ•ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤

āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āφāĻĒāύāĻŋ GitHub OAuth 2.0 āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āĻ•āϞ āĻ•āϰ⧇ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

  1. āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ GitHub āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖāϕ⧇ āĻāϕ⧀āĻ­ā§‚āϤ āĻ•āϰ⧁āύāĨ¤ GitHub āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āĻļ⧇āώ⧇, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāĻŦ⧇āύāĨ¤
  2. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ Node.js āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ Node.js āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ OAuth āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāĻ āĻžāύ⧎
  3. āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ GitHub āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ⧇āϰ āϜāĻ¨ā§āϝ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻŦāĻŋāύāĻŋāĻŽāϝāĻŧ āĻ•āϰ⧁āύ:

    Web

    import { GithubAuthProvider } from "firebase/auth";
    
    const credential = GithubAuthProvider.credential(token);

    Web

    var credential = firebase.auth.GithubAuthProvider.credential(token);
  4. Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύ:

    Web

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

    Web

    // 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 āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āĻ…āĻĢāĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟāϏ āĻ—āĻžāχāĻĄ āĻĻ⧇āϖ⧁āύāĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ

āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ—āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϤāĻĨā§āϝ — āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āϛ⧇āύāĨ¤ āĻāχ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ āύāĻž āϕ⧇āύ, āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…ā§āϝāĻžāĻĒ āϜ⧁āĻĄāĻŧ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

  • āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇, āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāϪ⧇āϰ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āϜāĻžāύāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Auth āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻāĻ•āϜāύ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻ• āϏ⧇āϟ āĻ•āϰāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ āφāĻĒāύāĻŋ User āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽā§ŒāϞāĻŋāĻ• āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āϤāĻĨā§āϝ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻĻ⧇āϖ⧁āύāĨ¤

  • āφāĻĒāύāĻžāϰ Firebase Realtime Database āĻāĻŦāĻ‚ Cloud Storage āϏ⧁āϰāĻ•ā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§‡ , āφāĻĒāύāĻŋ 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.
});
,

āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ 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. āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ.

Firebase SDK āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ-āχāύ āĻĢā§āϞ⧋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Firebase JavaScript SDK-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻžāĨ¤ (āϝāĻĻāĻŋ āφāĻĒāύāĻŋ Node.js āĻŦāĻž āĻ…āĻ¨ā§āϝ āĻ…-āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšāϟāĻŋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤)

Firebase JavaScript SDK āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇, āĻāχ āϧāĻžāĻĒāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ:

  1. GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦāĻ¸ā§āϤ⧁āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ:

    Web

    import { GithubAuthProvider } from "firebase/auth";
    
    const provider = new GithubAuthProvider();

    Web

    var provider = new firebase.auth.GithubAuthProvider();
  2. āϐāĻšā§āĻ›āĻŋāĻ• : āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ OAuth 2.0 āĻ¸ā§āϕ⧋āĻĒāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āϚāĻžāύ⧎ āĻāĻ•āϟāĻŋ āϏ⧁āϝ⧋āĻ— āϝ⧋āĻ— āĻ•āϰāϤ⧇, addScope āĻ•āϞ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻŽāύ:

    Web

    provider.addScope('repo');

    Web

    provider.addScope('repo');
    āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĻ⧇āϖ⧁āύāĨ¤
  3. āϐāĻšā§āĻ›āĻŋāĻ• : āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻžāĻ¸ā§āϟāĻŽ OAuth āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ OAuth āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāĻžāĻ āĻžāϤ⧇ āϚāĻžāύāĨ¤ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϝ⧋āĻ— āĻ•āϰāϤ⧇, OAuth āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻŽāĻžāύ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻž āϕ⧀ āϏāĻŽāĻ¨ā§āĻŦāĻŋāϤ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϏāĻš āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϤ⧇ setCustomParameters āĻ āĻ•āϞ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻŽāύ:

    Web

    provider.setCustomParameters({
      'allow_signup': 'false'
    });

    Web

    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ OAuth āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āύāϝāĻŧ āĻāĻŦāĻ‚ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āφāϰ⧋ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤
  4. GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦāĻ¸ā§āϤ⧁ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύāĨ¤ āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒāĻĒ-āφāĻĒ āωāχāĻ¨ā§āĻĄā§‹ āĻ–ā§‹āϞāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦāĻž āϏāĻžāχāύ-āχāύ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ āĻĒ⧁āύāσāύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āϤāĻžāĻĻ⧇āϰ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻĒāĻĻā§āϧāϤāĻŋ āĻŽā§‹āĻŦāĻžāχāϞ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
    • āĻāĻ•āϟāĻŋ āĻĒāĻĒ-āφāĻĒ āωāχāĻ¨ā§āĻĄā§‹ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇, signInWithPopup āĻ•āϞ āĻ•āϰ⧁āύ:

      Web

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

      Web

      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` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āĻ…āύ⧁āĻļā§€āϞāύāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ⧎

      Web

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

      Web

      firebase.auth().signInWithRedirect(provider);
      āϤāĻžāϰāĻĒāϰ, āφāĻĒāύāĻžāϰ āĻĒ⧃āĻˇā§āĻ āĻž āϞ⧋āĻĄ āĻšāϞ⧇ getRedirectResult āĻ•āϞ āĻ•āϰ⧇ āφāĻĒāύāĻŋ GitHub āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ OAuth āĻŸā§‹āϕ⧇āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

      Web

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

      Web

      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;
          // ...
        });
      āĻāϟāĻŋāĻ“ āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋāϗ⧁āϞāĻŋ āϧāϰāϤ⧇ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āĻ¤ā§āϰ⧁āϟāĻŋ āϕ⧋āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĄāĻ•ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤

āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āφāĻĒāύāĻŋ GitHub OAuth 2.0 āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āĻ•āϞ āĻ•āϰ⧇ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ GitHub āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

  1. āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ GitHub āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖāϕ⧇ āĻāϕ⧀āĻ­ā§‚āϤ āĻ•āϰ⧁āύāĨ¤ GitHub āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āĻļ⧇āώ⧇, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāĻŦ⧇āύāĨ¤
  2. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ Node.js āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ Node.js āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ OAuth āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāĻ āĻžāύ⧎
  3. āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ GitHub āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ⧇āϰ āϜāĻ¨ā§āϝ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻŦāĻŋāύāĻŋāĻŽāϝāĻŧ āĻ•āϰ⧁āύ:

    Web

    import { GithubAuthProvider } from "firebase/auth";
    
    const credential = GithubAuthProvider.credential(token);

    Web

    var credential = firebase.auth.GithubAuthProvider.credential(token);
  4. Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύ:

    Web

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

    Web

    // 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 āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āĻ…āĻĢāĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟāϏ āĻ—āĻžāχāĻĄ āĻĻ⧇āϖ⧁āύāĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ

āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ—āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϤāĻĨā§āϝ — āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āϛ⧇āύāĨ¤ āĻāχ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ āύāĻž āϕ⧇āύ, āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…ā§āϝāĻžāĻĒ āϜ⧁āĻĄāĻŧ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

  • āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇, āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāϪ⧇āϰ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āϜāĻžāύāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Auth āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻāĻ•āϜāύ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻ• āϏ⧇āϟ āĻ•āϰāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ āφāĻĒāύāĻŋ User āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽā§ŒāϞāĻŋāĻ• āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āϤāĻĨā§āϝ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻĻ⧇āϖ⧁āύāĨ¤

  • āφāĻĒāύāĻžāϰ Firebase Realtime Database āĻāĻŦāĻ‚ Cloud Storage āϏ⧁āϰāĻ•ā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§‡ , āφāĻĒāύāĻŋ 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.
});