אימות באמצעות Yahoo באמצעות JavaScript

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

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

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

  1. מוסיפים את Firebase לפרויקט ב-JavaScript.
  2. במסוף Firebase, פותחים את הקטע אימות.
  3. בכרטיסייה שיטת כניסה, מפעילים את ספק Yahoo.
  4. מוסיפים את מזהה הלקוח ואת סוד הלקוח מ-Developer Console של הספק להגדרות הספק:
    1. כדי לרשום לקוח Yahoo OAuth, פועלים לפי ההוראות בתיעוד למפתחים של Yahoo בנושא רישום אפליקציית אינטרנט ב-Yahoo.

      חשוב לבחור את שתי הרשאות ה-API של OpenID Connect: profile ו-email.

    2. כשרושמים אפליקציות אצל הספקים האלה, חשוב לרשום את הדומיין *.firebaseapp.com של הפרויקט כדומיין ההפניה של האפליקציה.
  5. לוחצים על שמירה.

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

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

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

  1. יוצרים מופע של OAuthProvider באמצעות מזהה הספק yahoo.com.

    Web

    import { OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('yahoo.com');

    Web

    var provider = new firebase.auth.OAuthProvider('yahoo.com');
  2. אופציונלי: מציינים פרמטרים נוספים של OAuth בהתאמה אישית שרוצים לשלוח עם בקשת ה-OAuth.

    Web

    provider.setCustomParameters({
      // Prompt user to re-authenticate to Yahoo.
      prompt: 'login',
      // Localize to French.
      language: 'fr'
    });  

    Web

    provider.setCustomParameters({
      // Prompt user to re-authenticate to Yahoo.
      prompt: 'login',
      // Localize to French.
      language: 'fr'
    });  

    למידע על הפרמטרים ש-Yahoo תומכת בהם, אפשר לעיין במסמכי התיעוד בנושא Yahoo OAuth. הערה: אי אפשר להעביר פרמטרים שנדרשים על ידי Firebase באמצעות התג setCustomParameters(). הפרמטרים האלה הם client_id,‏ redirect_uri, ‏ response_type, ‏ scope ו-state.

  3. אופציונלי: מציינים היקפי הרשאות נוספים של OAuth 2.0 מעבר ל-profile ול-email שרוצים לבקש מספק האימות. אם האפליקציה שלכם דורשת גישה לנתונים פרטיים של משתמשים מ-Yahoo APIs, תצטרכו לבקש הרשאות ל-Yahoo APIs בקטע API Permissions ב-Yahoo developer console. היקפי ה-OAuth המבוקשים צריכים להיות זהים להיקפים שהוגדרו מראש בהרשאות ה-API של האפליקציה. לדוגמה, אם נדרשת גישת קריאה/כתיבה לאנשי הקשר של המשתמש והיא מוגדרת מראש בהרשאות ה-API של האפליקציה, צריך להעביר את sdct-w במקום את היקף הגישה לקריאה בלבד של OAuth‏ sdct-r. אחרת, התהליך ייכשל ותוצג הודעת שגיאה למשתמש הקצה.

    Web

    // Request access to Yahoo Mail API.
    provider.addScope('mail-r');
    // Request read/write access to user contacts.
    // This must be preconfigured in the app's API permissions.
    provider.addScope('sdct-w');

    Web

    // Request access to Yahoo Mail API.
    provider.addScope('mail-r');
    // Request read/write access to user contacts.
    // This must be preconfigured in the app's API permissions.
    provider.addScope('sdct-w');

    מידע נוסף מופיע במאמרי העזרה בנושא היקפי ההרשאות של Yahoo.

  4. מתבצע אימות באמצעות Firebase באמצעות אובייקט ספק OAuth. אתם יכולים להציג למשתמשים בקשה להיכנס באמצעות חשבונות Yahoo שלהם על ידי פתיחת חלון קופץ או על ידי הפניה לדף הכניסה. מומלץ להשתמש בשיטת ההפניה האוטומטית במכשירים ניידים.

    • כדי להיכנס באמצעות חלון קופץ, מתקשרים אל signInWithPopup:

      Web

      import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // IdP data available in result.additionalUserInfo.profile
          // ...
      
          // Yahoo OAuth access token and ID token can be retrieved by calling:
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });

      Web

      firebase.auth().signInWithPopup(provider)
        .then((result) => {
          // IdP data available in result.additionalUserInfo.profile
          // ...
      
          /** @type {firebase.auth.OAuthCredential} */
          const credential = result.credential;
      
          // Yahoo OAuth access token and ID token can be retrieved by calling:
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });
    • כדי להיכנס באמצעות הפניה לדף הכניסה, קוראים לפונקציה signInWithRedirect:

      firebase.auth().signInWithRedirect(provider);
      

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

    Web

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

    Web

    firebase.auth().signInWithRedirect(provider);

    אחרי השלמת התהליך, אפשר לאחזר את טוקן הגישה ואת טוקן ה-ID של OAuth שמשויכים לספק מאובייקט firebase.auth.UserCredential שמוחזר.

    באמצעות אסימון הגישה ל-OAuth, אפשר לשלוח קריאה ל-Yahoo API.

    לדוגמה, כדי לקבל את פרטי הפרופיל הבסיסיים, אפשר לקרוא ל-API ל-REST הבא:

    curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json

    כאשר YAHOO_USER_UID הוא המזהה של המשתמש ב-Yahoo, שאפשר לאחזר אותו מהשדה firebase.auth().currentUser.providerData[0].uid או מ-result.additionalUserInfo.profile.

  5. בדוגמאות שלמעלה התמקדנו בתהליכי כניסה, אבל אפשר גם לקשר ספק של Yahoo למשתמש קיים באמצעות linkWithPopup/linkWithRedirect. לדוגמה, אפשר לקשר כמה ספקים לאותו משתמש כדי לאפשר לו להיכנס באמצעות כל אחד מהם.

    Web

    import { getAuth, linkWithPopup, OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('yahoo.com');
    const auth = getAuth();
    linkWithPopup(auth.currentUser, provider)
        .then((result) => {
          // Yahoo credential is linked to the current user.
          // IdP data available in result.additionalUserInfo.profile.
    
          // Get the OAuth access token and ID Token
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });

    Web

    var provider = new firebase.auth.OAuthProvider('yahoo.com');
    firebase.auth().currentUser.linkWithPopup(provider)
        .then((result) => {
          // Yahoo credential is linked to the current user.
          // IdP data available in result.additionalUserInfo.profile.
          // Yahoo OAuth access token can be retrieved by calling:
          // result.credential.accessToken
          // Yahoo OAuth ID token can be retrieved by calling:
          // result.credential.idToken
        })
        .catch((error) => {
          // Handle error.
        });
  6. אפשר להשתמש באותו דפוס עם reauthenticateWithPopup/reauthenticateWithRedirect כדי לאחזר פרטי כניסה חדשים לפעולות רגישות שדורשות כניסה עדכנית.

    Web

    import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('yahoo.com');
    const auth = getAuth();
    reauthenticateWithPopup(auth.currentUser, provider)
        .then((result) => {
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
    
          // Get the OAuth access token and ID Token
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });

    Web

    var provider = new firebase.auth.OAuthProvider('yahoo.com');
    firebase.auth().currentUser.reauthenticateWithPopup(provider)
        .then((result) => {
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Yahoo OAuth access token can be retrieved by calling:
          // result.credential.accessToken
          // Yahoo OAuth ID token can be retrieved by calling:
          // result.credential.idToken
        })
        .catch((error) => {
          // Handle error.
        });

אימות באמצעות 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.
});