اصالت‌سنجی با Firebase بااستفاده از «حساب‌های مبتنی بر گذرواژه» بااستفاده از جاوا اسکریپت

می‌توانید از Firebase Authentication استفاده کنید تا به کاربران اجازه دهید بااستفاده از نشانی‌های ایمیل و گذرواژه‌هایشان در Firebase اصالت‌سنجی کنند و حساب‌های مبتنی بر گذرواژه برنامه‌تان را مدیریت کنند.

برای دریافت کمک از هوش مصنوعی، پیام‌واره زیر را در عامل کدنویسی هوش مصنوعی خود (مثل Antigravity،‏ Claude Code،‏ Codex، و Cursor) کپی کنید. می‌توانید پیام‌واره را سفارشی‌سازی کنید و با نماینده‌تان تکرار کنید. برای اطلاعات دقیق نصب، به مهارت‌های عامل Firebase مراجعه کنید.

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase Authentication with email and password authentication in my app.

قبل از شروع

  1. ‫Firebase را به پروژه جاوا اسکریپت خود اضافه کنید.
  2. اگر هنوز برنامه‌تان را به پروژه Firebase متصل نکرده‌اید، این کار را از کنسول Firebase انجام دهید.
  3. «ایمیل/گذرواژه» را به‌عنوان ارائه‌دهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
    1. در کنسول Firebase، به امنیت > اصالت‌سنجی بروید.
    2. در برگه روش ورود به سیستم، ارائه‌دهنده ورود به سیستم ایمیل/گذرواژه را فعال کنید.
    3. روی ذخیره کردن کلیک کنید.

ایجاد حساب مبتنی بر گذرواژه

برای ایجاد حساب کاربری جدید با گذرواژه، مراحل زیر را در صفحه ثبت‌نام برنامه‌تان تکمیل کنید:

  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;
        // ..
      });
    اگر حساب جدید ایجاد شده باشد، کاربر به‌طور خودکار به سیستم وارد می‌شود. برای دریافت جزئیات کاربر واردشده به سیستم، به بخش «مراحل بعدی» در زیر نگاهی بیندازید.

    در اینجا می‌توانید خطاها را نیز شناسایی و مدیریت کنید. برای مشاهده فهرست کدهای خطا، به اسناد مرجع Auth نگاهی بیندازید.

کاربری را با نشانی ایمیل و گذرواژه به سیستم وارد کنید

مراحل ورود به سیستم کاربر با گذرواژه مشابه مراحل ایجاد حساب جدید است. در صفحه ورود به سیستم برنامه‌تان، کارهای زیر را انجام دهید:

  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;
      });
    برای دریافت جزئیات کاربر واردشده، به بخش «مراحل بعدی» در زیر نگاهی بیندازید.

    در اینجا می‌توانید خطاها را نیز شناسایی و مدیریت کنید. برای مشاهده فهرست کدهای خطا، به اسناد مرجع Auth نگاهی بیندازید.

توصیه‌شده: خط‌مشی گذرواژه تنظیم کنید

با اعمال الزامات پیچیدگی گذرواژه می‌توانید امنیت حساب را بهبود دهید.

برای پیکربندی خط‌مشی گذرواژه برای پروژه، بخش خط‌مشی گذرواژه را در برگه امنیت > اصالت‌سنجی > تنظیمات کنسول Firebase باز کنید:

تنظیمات اصالت‌سنجی

خط‌مشی‌های گذرواژه Firebase Authentication از الزامات گذرواژه زیر پشتیبانی می‌کنند:

  • نویسه حرف کوچک لازم است

  • نویسه حروف بزرگ لازم است

  • نویسه عددی لازم است

  • نویسه غیرالفباعددی لازم است

    نویسه‌های زیر شرط نویسه غیرالفباعددی را برآورده می‌کنند: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • حداقل طول گذرواژه (از ۶ تا ۳۰ نویسه متغیر است؛ مقدار پیش‌فرض ۶ است)

  • حداکثر طول گذرواژه (حداکثر طول ۴۰۹۶ نویسه)

می‌توانید اجرای خط‌مشی گذرواژه را در دو حالت فعال کنید:

  • الزامی: تلاش برای ثبت‌نام تا زمانی‌که کاربر گذرواژه‌ای مطابق با خط‌مشی شما به‌روزرسانی نکند ناموفق خواهد بود.

  • اعلان: کاربران مجازند با گذرواژه غیرمنطبق ثبت‌نام کنند. هنگام استفاده از این حالت، باید بررسی کنید که آیا گذرواژه کاربر با خط‌مشی سمت مشتری مطابقت دارد یا نه و اگر مطابقت ندارد، به نحوی از کاربر بخواهید گذرواژه خود را به‌روز کند.

کاربران جدید همیشه ملزم به انتخاب گذرواژه‌ای هستند که با خط‌مشی شما مطابقت داشته باشد.

اگر کاربر فعال دارید، توصیه می‌کنیم ارتقای اجباری را در ورود به سیستم فعال نکنید مگر اینکه قصد داشته باشید دسترسی کاربرانی را که گذرواژه‌هایشان با خط‌مشی شما مطابقت ندارد مسدود کنید. به‌جای آن، از حالت اعلان استفاده کنید که به کاربران امکان می‌دهد با گذرواژه‌های فعلی‌شان به سیستم وارد شوند و به آن‌ها اطلاع می‌دهد که گذرواژه‌شان چه شرایطی را ندارد.

درحال اعتبارسنجی گذرواژه در کارخواه

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 که نشانی‌های ایمیل را به‌عنوان پارامتر می‌گیرند، اگر نشانی ایمیل ثبت‌نشده باشد درحالی‌که باید ثبت‌شده باشد (برای مثال، هنگام ورود به سیستم با نشانی ایمیل و گذرواژه)، یا ثبت‌شده باشد درحالی‌که باید استفاده‌نشده باشد (برای مثال، هنگام تغییر نشانی ایمیل کاربر)، خطاهای خاصی را برمی‌گردانند. اگرچه این کار می‌تواند برای پیشنهاد کردن راهکارهای درمانی خاص به کاربران مفید باشد، اما بازیگران مخرب نیز می‌توانند از آن سوءاستفاده کنند تا نشانی‌های ایمیل ثبت‌شده توسط کاربران شما را کشف کنند.

برای کاهش این خطر، توصیه می‌کنیم مطمئن شوید که محافظت از شمارش ایمیل برای پروژه شما فعال باشد. می‌توانید این تنظیم را در کنسول Firebase بررسی کنید: به امنیت > اصالت‌سنجی > برگه تنظیمات بروید، و سپس روی کنش‌های کاربر کلیک کنید.

توجه داشته باشید که فعال کردن این ویژگی رفتار گزارش خطا را برای 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.
});