אימות באמצעות Twitter ב-JavaScript

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

לפני שמתחילים

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

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

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

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

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

    Web

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

    Web

    var provider = new firebase.auth.TwitterAuthProvider();
  2. אופציונלי: כדי להתאים את תהליך OAuth של הספק לשפה המועדפת של המשתמש בלי להעביר במפורש את הפרמטרים הרלוונטיים של OAuth בהתאמה אישית, מעדכנים את קוד השפה במופע Auth לפני שמתחילים את תהליך OAuth. לדוגמה:

    Web

    import { getAuth } from "firebase/auth";
    
    const auth = getAuth();
    auth.languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // auth.useDeviceLanguage();

    Web

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  3. אופציונלי: מציינים פרמטרים נוספים של ספק OAuth מותאם אישית שרוצים לשלוח עם בקשת ה-OAuth. כדי להוסיף פרמטר בהתאמה אישית, קוראים ל-setCustomParameters בספק שאותחל עם אובייקט שמכיל את המפתח כפי שצוין במסמכי התיעוד של ספק OAuth ואת הערך התואם. לדוגמה:

    Web

    provider.setCustomParameters({
      'lang': 'es'
    });

    Web

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

      Web

      import { getAuth, signInWithPopup, TwitterAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          const credential = TwitterAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          const secret = credential.secret;
      
          // 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 = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          var token = credential.accessToken;
          var secret = credential.secret;
      
          // 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;
          // ...
        });
      שימו לב שאפשר גם לאחזר את אסימון ה-OAuth של ספק Twitter, שבו אפשר להשתמש כדי לאחזר נתונים נוספים באמצעות ממשקי ה-API של Twitter.

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

    • כדי להיכנס לחשבון באמצעות הפניה לדף הכניסה, קוראים ל-signInWithRedirect: חשוב לפעול לפי השיטות המומלצות כשמשתמשים ב-signInWithRedirect.

      Web

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

      Web

      firebase.auth().signInWithRedirect(provider);
      אחרי כן, אפשר גם לאחזר את אסימון ה-OAuth של ספק Twitter על ידי קריאה ל- getRedirectResult כשהדף נטען:

      Web

      import { getAuth, getRedirectResult, TwitterAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          const credential = TwitterAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          const secret = credential.secret;
          // ...
      
          // 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 = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
            // You can use these server side with your app's credentials to access the Twitter API.
            var token = credential.accessToken;
            var secret = credential.secret;
            // ...
          }
      
          // 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 באמצעות חשבון Twitter. לשם כך, צריך לטפל בתהליך הכניסה על ידי קריאה לנקודות הקצה של Twitter OAuth:

  1. מטמיעים את אימות הזהות של טוויטר באפליקציה בהתאם למסמכי העזרה למפתחים. בסיום תהליך הכניסה ל-Twitter, תקבלו אסימון גישה ל-OAuth וסוד OAuth.
  2. אם אתם צריכים להיכנס לאפליקציית Node.js, שלחו לאפליקציית Node.js את אסימון הגישה של OAuth ואת סוד OAuth.
  3. אחרי שהמשתמש מתחבר בהצלחה באמצעות Twitter, מחליפים את אסימון הגישה של OAuth ואת סוד ה-OAuth בפרטי כניסה ל-Firebase:
    var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
  4. מבצעים אימות באמצעות Firebase עם פרטי הכניסה של Firebase:

    Web

    import { getAuth, signInWithCredential, FacebookAuthProvider } from "firebase/auth";
    
    // Sign in with the credential from the Facebook user.
    const auth = getAuth();
    signInWithCredential(auth, credential)
      .then((result) => {
        // Signed in 
        const credential = FacebookAuthProvider.credentialFromResult(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 = FacebookAuthProvider.credentialFromError(error);
        // ...
      });

    Web

    // Sign in with the credential from the Facebook user.
    firebase.auth().signInWithCredential(credential)
      .then((result) => {
        // Signed in       
        var credential = result.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;
        // ...
      });

אימות באמצעות Firebase בתוסף ל-Chrome

אם אתם מפתחים אפליקציית תוסף ל-Chrome, כדאי לעיין במדריך למסמכים מחוץ למסך.

השלבים הבאים

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

  • הדרך המומלצת לדעת מה סטטוס האימות של המשתמש באפליקציות היא להגדיר אובייקט 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.
});