אימות עם Firebase באמצעות חשבונות מבוססי-סיסמה באמצעות JavaScript

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

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

  1. מוסיפים את Firebase לפרויקט JavaScript.
  2. אם עדיין לא קישרתם את האפליקציה לפרויקט Firebase, תוכלו לעשות זאת דרך מסוף Firebase.
  3. מפעילים את הכניסה באמצעות כתובת אימייל/סיסמה:
    1. במסוף Firebase, פותחים את הקטע Auth.
    2. בכרטיסייה Sign in method, מפעילים את אמצעי הכניסה Email/password ולוחצים על Save.

יצירת חשבון שמבוסס על סיסמה

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

  1. כשמשתמש חדש נרשם באמצעות טופס ההרשמה של האפליקציה, צריך להשלים את השלבים החדשים לאימות החשבון שנדרשים לאפליקציה, למשל כדי לוודא שהסיסמה של החשבון החדש הוקלדה בצורה נכונה ועומדת בדרישות המורכבות שלך.
  2. כדי ליצור חשבון חדש, מעבירים את כתובת האימייל והסיסמה של המשתמש החדש אל createUserWithEmailAndPassword:

    Web

    import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
    
    const auth = getAuth();
    createUserWithEmailAndPassword(auth, email, password)
      .then((userCredential) => {
        // Signed up 
        const user = userCredential.user;
        // ...
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ..
      });

    Web

    firebase.auth().createUserWithEmailAndPassword(email, password)
      .then((userCredential) => {
        // Signed in 
        var user = userCredential.user;
        // ...
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ..
      });
    אם החשבון החדש נוצר, המשתמש יתחבר באופן אוטומטי. כדי לקבל את פרטי המשתמש המחובר, כדאי לעיין בקטע 'השלבים הבאים' שבהמשך.

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

כניסה של משתמש באמצעות כתובת אימייל וסיסמה

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

  1. כשמשתמש נכנס לאפליקציה, מעבירים את כתובת האימייל והסיסמה שלו אל signInWithEmailAndPassword:

    Web

    import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
    
    const auth = getAuth();
    signInWithEmailAndPassword(auth, email, password)
      .then((userCredential) => {
        // Signed in 
        const user = userCredential.user;
        // ...
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
      });

    Web

    firebase.auth().signInWithEmailAndPassword(email, password)
      .then((userCredential) => {
        // Signed in
        var user = userCredential.user;
        // ...
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
      });
    בקטע 'השלבים הבאים' שבהמשך מוסבר איך לקבל את פרטי המשתמש שנכנס לחשבון.

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

מומלץ: הגדרת מדיניות סיסמאות

כדי לשפר את אבטחת החשבון, אפשר לאכוף דרישות לגבי מורכבות הסיסמאות.

כדי להגדיר מדיניות סיסמה לפרויקט, פותחים את הכרטיסייה Password policy בדף Authentication Settings במסוף Firebase:

הגדרות אימות

כללי המדיניות בנושא סיסמאות של Firebase Authentication תומכים בדרישות הבאות לגבי סיסמאות:

  • יש להזין תו באות קטנה

  • צריך להזין תו גדול

  • חובה להזין תו מספרי

  • נדרש תו לא אלפאנומרי

    התווים הבאים עומדים בדרישות לגבי תווים שאינם אלפאנומריים: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • אורך סיסמה מינימלי (נע בין 6 ל-30 תווים, ברירת המחדל היא 6)

  • האורך המקסימלי של הסיסמה (אורך מקסימלי של 4,096 תווים)

יש שני מצבים שבהם אפשר להפעיל את אכיפת המדיניות בנושא סיסמאות:

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

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

משתמשים חדשים תמיד נדרשים לבחור סיסמה שתואמת למדיניות שלכם.

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

אימות סיסמה בצד הלקוח

import { getAuth, validatePassword } from "firebase/auth";
const status = await validatePassword(getAuth(), passwordFromUser);
if (!status.isValid) {
  // Password could not be validated. Use the status to show what
  // requirements are met and which are missing.

  // If a criterion is undefined, it is not required by policy. If the
  // criterion is defined but false, it is required but not fulfilled by
  // the given password. For example:
  const needsLowerCase = status.containsLowercaseLetter !== true;
}

מומלץ: הפעלת הגנה על ספירת אימיילים

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

כדי למזער את הסיכון הזה, מומלץ להפעיל בפרויקט את ההגנה על ספירת אימיילים באמצעות הכלי gcloud של Google Cloud. חשוב לזכור שהפעלת התכונה הזו משנה את התנהגות הדיווח על שגיאות של Firebase Authentication: חשוב לוודא שהאפליקציה לא מסתמכת על השגיאות הספציפיות יותר.

השלבים הבאים

אחרי שמשתמש נכנס לחשבון בפעם הראשונה, נוצר חשבון משתמש חדש שמקושר לפרטי הכניסה – כלומר שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות – שבאמצעותם המשתמש נכנס לחשבון. החשבון החדש מאוחסן כחלק מפרויקט 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.
});