Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

אמת באמצעות GitHub עם JavaScript

באפשרותך לאפשר למשתמשים לבצע אימות עם Firebase באמצעות חשבונות GitHub שלהם על ידי שילוב אימות GitHub באפליקציה שלך. באפשרותך לשלב אימות GitHub על ידי שימוש ב- SDK של Firebase לביצוע זרימת הכניסה, או על ידי ביצוע זרימת GitHub OAuth 2.0 באופן ידני והעברת אסימון הגישה המתקבל ל- Firebase.

לפני שאתה מתחיל

  1. הוסף את Firebase לפרויקט JavaScript שלך .
  2. במסוף Firebase , פתח את החלק Auth .
  3. בכרטיסיה שיטת כניסה , הפעל את ספק GitHub .
  4. הוסף את מזהה הלקוח וסוד הלקוח ממסוף המפתחים של ספק זה לתצורת הספק:
    1. רשום את האפליקציה שלך כיישום מפתח ב- GitHub וקבל את מזהה הלקוח של OAuth 2.0 ואת סוד הלקוח .
    2. ודא שה- URI my-app-12345.firebaseapp.com/__/auth/handler OAuth של Firebase שלך ​​(למשל my-app-12345.firebaseapp.com/__/auth/handler ) מוגדר ככתובת האתר שלך להתקשרות חוזרת בדף ההגדרות של האפליקציה שלך בתצורה של אפליקציית GitHub שלך.
  5. לחץ על שמור .

לטפל בזרימת הכניסה באמצעות SDK של Firebase

אם אתה בונה אפליקציית אינטרנט, הדרך הקלה ביותר לאמת את המשתמשים שלך באמצעות Firebase באמצעות חשבונות GitHub שלהם היא לטפל בזרימת הכניסה באמצעות Firebase JavaScript SDK. (אם ברצונך לאמת משתמש בסביבת Node.js או בסביבה אחרת שאינה דפדפן, עליך לטפל בזרימת הכניסה באופן ידני.)

כדי לטפל בזרימת הכניסה עם Firebase JavaScript SDK, בצע את הצעדים הבאים:

  1. צור מופע של אובייקט ספק ה- GitHub:

    אינטרנט v8

    var provider = new firebase.auth.GithubAuthProvider();

    אינטרנט v9

    import { GithubAuthProvider } from "firebase/auth";
    
    const provider = new GithubAuthProvider();
  2. אופציונלי : ציין טווחי OAuth 2.0 נוספים שברצונך לבקש מספק האימות. כדי להוסיף היקף, התקשר ל- addScope . לדוגמה:

    אינטרנט v8

    provider.addScope('repo');

    אינטרנט v9

    provider.addScope('repo');
    עיין בתיעוד של ספק האימות .
  3. אופציונלי : ציין פרמטרים נוספים של ספק OAuth מותאם אישית שברצונך לשלוח עם בקשת OAuth. כדי להוסיף פרמטר מותאם אישית, התקשר ל- setCustomParameters לספק האתחול עם אובייקט המכיל את המפתח כמפורט בתיעוד ספק ה- OAuth והערך המתאים. לדוגמה:

    אינטרנט v8

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

    אינטרנט v9

    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    פרמטרי OAuth הנדרשים שמורים אינם מורשים ויתעלם מהם. לפרטים נוספים, עיין בהפניה של ספק האימות .
  4. אמת באמצעות Firebase באמצעות אובייקט ספק ה- GitHub. תוכל להנחות את המשתמשים שלך להיכנס עם חשבונות GitHub שלהם על ידי פתיחת חלון קופץ או על ידי הפניה מחדש לדף הכניסה. שיטת ההפניה עדיפה במכשירים ניידים.
    • כדי להיכנס באמצעות חלון קופץ, התקשר ל- signInWithPopup :

      אינטרנט v8

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

      אינטרנט v9

      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;
          // ...
        }).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 AuthCredential type that was used.
          const credential = GithubAuthProvider.credentialFromError(error);
          // ...
        });
      שימו לב גם שתוכלו לאחזר את אסימון ה- OAuth של ספק GitHub שבו ניתן להשתמש בכדי לאסוף נתונים נוספים באמצעות ממשקי ה- API של GitHub.

      זה גם המקום בו תוכלו לתפוס ולטפל בשגיאות. לקבלת רשימה של קודי שגיאה, עיין במסמכי ההפניה לאימות .

    • כדי להיכנס על ידי הפניה לדף הכניסה, התקשר ל- signInWithRedirect :

      אינטרנט v8

      firebase.auth().signInWithRedirect(provider);

      אינטרנט v9

      import { getAuth, signInWithRedirect } from "firebase/auth";
      
      const auth = getAuth();
      signInWithRedirect(auth, provider);
      לאחר מכן, תוכל גם לאחזר את אסימון ה- OAuth של ספק GitHub על ידי קריאה ל- getRedirectResult כאשר הדף שלך נטען:

      אינטרנט v8

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

      אינטרנט v9

      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;
        }).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 AuthCredential type that was used.
          const credential = GithubAuthProvider.credentialFromError(error);
          // ...
        });
      זה גם המקום בו תוכלו לתפוס ולטפל בשגיאות. לקבלת רשימה של קודי שגיאה, עיין במסמכי ההפניה לאימות .

לטפל בזרימת הכניסה באופן ידני

ניתן גם לבצע אימות באמצעות Firebase באמצעות חשבון GitHub על ידי טיפול בזרימת הכניסה על ידי קריאה לנקודות הקצה של GitHub OAuth 2.0:

  1. שלב את אימות GitHub באפליקציה שלך על ידי ביצוע התיעוד של המפתח . בסוף זרימת הכניסה של GitHub, תקבל אסימון גישה של OAuth 2.0.
  2. אם אתה צריך להיכנס ליישום Node.js, שלח את אסימון הגישה של OAuth ליישום Node.js.
  3. לאחר שמשתמש נכנס בהצלחה עם GitHub, החלף את אסימון הגישה של OAuth 2.0 בתעודת Firebase:

    אינטרנט v8

    var credential = firebase.auth.GithubAuthProvider.credential(token);

    אינטרנט v9

    import { GithubAuthProvider } from "firebase/auth";
    
    const credential = GithubAuthProvider.credential(token);
  4. אמת באמצעות Firebase באמצעות אישורי Firebase:

    אינטרנט v8

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

    אינטרנט v9

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

אמת באמצעות Firebase בתוסף Chrome

אם אתה בונה אפליקציית תוספים ל- Chrome, עליך להוסיף את מזהה התוסף שלך ל- Chrome:

  1. פתח את הפרויקט שלך במסוף Firebase .
  2. במקטע אימות , פתח את דף שיטת הכניסה .
  3. הוסף URI כמו הבא לרשימת התחומים המורשים:
    chrome-extension://CHROME_EXTENSION_ID

רק פעולות קופצות ( signInWithPopup ו- linkWithPopup ) זמינות linkWithPopup Chrome, שכן סיומות Chrome אינן יכולות להשתמש בהפניות מחדש של HTTP. עליך להתקשר לשיטות אלה מתסריט רקע ולא מקופץ לפעולה בדפדפן, מכיוון שקופץ האימות יבטל את חלון הקופץ של פעולת הדפדפן.

בקובץ המניפסט של הרחבת Chrome שלך ​​הקפד להוסיף את כתובת האתר https://apis.google.com לרשימת ההיתרים content_security_policy .

הצעדים הבאים

לאחר שמשתמש נכנס בפעם הראשונה, נוצר חשבון משתמש חדש ומקושר לאישורי האישור - כלומר לשם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות - המשתמש נכנס איתו. חשבון חדש זה מאוחסן כחלק מפרויקט Firebase שלך, וניתן להשתמש בו כדי לזהות משתמש בכל אפליקציה בפרויקט שלך, ללא קשר לאופן בו המשתמש נכנס.

  • באפליקציות שלך, הדרך המומלצת לדעת את סטטוס האימות של המשתמש שלך היא להגדיר משקיפה על אובייקט Auth . לאחר מכן תוכל לקבל את פרטי הפרופיל הבסיסיים של User מאובייקט User . ראה ניהול משתמשים .

  • במסד הנתונים שלך בזמן אמת של Firebase ובכללי האבטחה של אחסון ענן, אתה יכול לקבל את מזהה המשתמש הייחודי של המשתמש auth ממשתנה auth , ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

באפשרותך לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות ספקי אימות מרובים על ידי קישור אישורי ספק האימות לחשבון משתמש קיים.

כדי לצאת ממשתמש, התקשר ל- signOut :

אינטרנט v8

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

אינטרנט v9

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

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