با Firebase با استفاده از حساب‌های مبتنی بر رمز عبور در Android احراز هویت کنید

شما می‌توانید از Firebase Authentication برای احراز هویت کاربران خود با استفاده از آدرس‌های ایمیل و رمزهای عبورشان در Firebase و مدیریت حساب‌های کاربری مبتنی بر رمز عبور برنامه خود استفاده کنید.

قبل از اینکه شروع کنی

  1. اگر هنوز Firebase را به پروژه اندروید خود اضافه نکرده‌اید، آن را اضافه کنید.

  2. اگر هنوز برنامه خود را به پروژه Firebase خود متصل نکرده‌اید، این کار را از کنسول Firebase انجام دهید.
  3. فعال کردن ورود با ایمیل/رمز عبور:
    1. در کنسول Firebase ، بخش Auth را باز کنید.
    2. در برگه «روش ورود» ، روش ورود با ایمیل/رمز عبور را فعال کرده و روی «ذخیره» کلیک کنید.
  4. در فایل Gradle ماژول (سطح برنامه) خود (معمولاً <project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle )، وابستگی مربوط به کتابخانه Firebase Authentication برای اندروید را اضافه کنید. توصیه می‌کنیم برای کنترل نسخه‌بندی کتابخانه Firebase Android BoM استفاده کنید.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.9.0"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    }

    با استفاده از Firebase Android BoM ، برنامه شما همیشه از نسخه‌های سازگار کتابخانه‌های اندروید Firebase استفاده خواهد کرد.

    (جایگزین) اضافه کردن وابستگی‌های کتابخانه Firebase بدون استفاده از BoM

    اگر تصمیم به استفاده از Firebase BoM ندارید، باید هر نسخه از کتابخانه Firebase را در خط وابستگی آن مشخص کنید.

    توجه داشته باشید که اگر از چندین کتابخانه Firebase در برنامه خود استفاده می‌کنید، اکیداً توصیه می‌کنیم از BoM برای مدیریت نسخه‌های کتابخانه استفاده کنید، که تضمین می‌کند همه نسخه‌ها سازگار هستند.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:24.0.1")
    }

ایجاد حساب کاربری مبتنی بر رمز عبور

برای ایجاد یک حساب کاربری جدید با رمز عبور، مراحل زیر را در فعالیت ورود به سیستم برنامه خود انجام دهید:

  1. در متد onCreate مربوط به فعالیت ثبت‌نام خود، نمونه‌ی مشترک شیء FirebaseAuth را دریافت کنید:

    Kotlin

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. هنگام مقداردهی اولیه Activity، بررسی کنید که آیا کاربر در حال حاضر وارد سیستم شده است یا خیر:

    Kotlin

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        if (currentUser != null) {
            reload()
        }
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser != null){
            reload();
        }
    }
  3. وقتی یک کاربر جدید با استفاده از فرم ثبت نام برنامه شما ثبت نام می‌کند، هرگونه مراحل اعتبارسنجی حساب جدید را که برنامه شما نیاز دارد، مانند تأیید صحت تایپ رمز عبور حساب جدید و مطابقت آن با الزامات پیچیدگی شما، تکمیل کنید.
  4. با ارسال آدرس ایمیل و رمز عبور کاربر جدید به createUserWithEmailAndPassword ، یک حساب کاربری جدید ایجاد کنید:

    Kotlin

    auth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "createUserWithEmail:success")
                val user = auth.currentUser
                updateUI(user)
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "createUserWithEmail:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "createUserWithEmail:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "createUserWithEmail:failure", task.getException());
                        Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });
    اگر حساب کاربری جدید ایجاد شده باشد، کاربر نیز وارد سیستم شده است. در فراخوانی، می‌توانید از متد getCurrentUser برای دریافت اطلاعات حساب کاربری استفاده کنید.

ورود کاربر با آدرس ایمیل و رمز عبور

مراحل ورود به سیستم کاربر با رمز عبور مشابه مراحل ایجاد یک حساب کاربری جدید است. در فعالیت ورود به سیستم برنامه خود، موارد زیر را انجام دهید:

  1. در متد onCreate مربوط به فعالیت ورود به سیستم، نمونه‌ی مشترک شیء FirebaseAuth را دریافت کنید:

    Kotlin

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. هنگام مقداردهی اولیه Activity، بررسی کنید که آیا کاربر در حال حاضر وارد سیستم شده است یا خیر:

    Kotlin

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        if (currentUser != null) {
            reload()
        }
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser != null){
            reload();
        }
    }
  3. وقتی کاربری وارد برنامه شما می‌شود، آدرس ایمیل و رمز عبور کاربر را به signInWithEmailAndPassword ارسال کنید:

    Kotlin

    auth.signInWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "signInWithEmail:success")
                val user = auth.currentUser
                updateUI(user)
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInWithEmail:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithEmail:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithEmail:failure", task.getException());
                        Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });
    اگر ورود به سیستم با موفقیت انجام شد، می‌توانید از FirebaseUser برگردانده شده برای ادامه استفاده کنید.

توصیه می‌شود: یک سیاست رمز عبور تنظیم کنید

شما می‌توانید با اعمال الزامات پیچیدگی رمز عبور، امنیت حساب کاربری خود را بهبود بخشید.

برای پیکربندی یک سیاست رمز عبور برای پروژه خود، برگه سیاست رمز عبور را در صفحه تنظیمات احراز هویت کنسول Firebase باز کنید:

تنظیمات احراز هویت

سیاست‌های رمز عبور Firebase Authentication از الزامات رمز عبور زیر پشتیبانی می‌کنند:

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

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

  • کاراکتر عددی مورد نیاز است

  • کاراکتر غیرحرف و عددی الزامی است

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

  • حداقل طول رمز عبور (از ۶ تا ۳۰ کاراکتر متغیر است؛ پیش‌فرض ۶ است)

  • حداکثر طول رمز عبور (حداکثر طول ۴۰۹۶ کاراکتر)

شما می‌توانید اجرای سیاست رمز عبور را در دو حالت فعال کنید:

  • الزام : تلاش برای ثبت نام تا زمانی که کاربر رمز عبور خود را مطابق با خط‌مشی شما تغییر ندهد، ناموفق خواهد بود.

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

کاربران جدید همیشه موظفند رمز عبوری را انتخاب کنند که با خط‌مشی شما مطابقت داشته باشد.

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

توصیه می‌شود: فعال کردن محافظت از شمارش ایمیل

برخی از روش‌های Firebase Authentication که آدرس‌های ایمیل را به عنوان پارامتر می‌گیرند، در صورتی که آدرس ایمیل ثبت نشده باشد، در حالی که باید ثبت شود (مثلاً هنگام ورود با آدرس ایمیل و رمز عبور)، یا در حالی که باید استفاده نشود (مثلاً هنگام تغییر آدرس ایمیل کاربر)، ثبت شده باشد، خطاهای خاصی را ایجاد می‌کنند. اگرچه این می‌تواند برای پیشنهاد راه‌حل‌های خاص به کاربران مفید باشد، اما می‌تواند توسط افراد مخرب برای کشف آدرس‌های ایمیل ثبت شده توسط کاربران شما نیز مورد سوءاستفاده قرار گیرد.

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

مراحل بعدی

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

  • در برنامه‌های خود، می‌توانید اطلاعات اولیه پروفایل کاربر را از شیء FirebaseUser دریافت کنید. به مدیریت کاربران مراجعه کنید.

  • در قوانین امنیتی پایگاه داده و Cloud Storage Firebase Realtime Database ، می‌توانید شناسه کاربری منحصر به فرد کاربر وارد شده را از متغیر auth دریافت کنید و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آنها دسترسی داشته باشد، استفاده کنید.

شما می‌توانید با پیوند دادن اعتبارنامه‌های ارائه‌دهنده‌ی احراز هویت به یک حساب کاربری موجود، به کاربران اجازه دهید با استفاده از چندین ارائه‌دهنده‌ی احراز هویت به برنامه‌ی شما وارد شوند.

برای خروج کاربر، signOut را فراخوانی کنید:

Kotlin

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();