مدیریت کاربران در Firebase

یک کاربر ایجاد کنید

شما یک کاربر جدید در پروژه Firebase خود به چهار روش ایجاد می کنید:

  • متد createUserWithEmailAndPassword() فراخوانی کنید.
  • برای اولین بار با استفاده از یک ارائه دهنده هویت فدرال ، مانند Google Sign-In، Facebook Login یا Apple، یک کاربر را وارد کنید.

همچنین می‌توانید از بخش احراز هویت کنسول Firebase در صفحه کاربران، کاربران تأیید شده با رمز عبور جدید ایجاد کنید.

پروفایل کاربری را دریافت کنید

برای دریافت اطلاعات نمایه کاربر، از ویژگی های User استفاده کنید. سه راه برای به دست آوردن یک شی User که کاربر فعلی را نشان می دهد وجود دارد:

  • جریان‌های authStateChanges ، idTokenChanges و userChanges : شنوندگان شما User فعلی را دریافت می‌کنند یا اگر کاربری احراز هویت نشده باشد، null :

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

    هنگامی که برنامه شروع به کار می کند، پس از بازیابی اطلاعات کاربری (در صورت وجود) از حافظه محلی، یک رویداد فعال می شود، به این معنی که شنوندگان شما همیشه زمانی که حالت کاربر مقداردهی اولیه می شود، فراخوانی می شوند. سپس، هر زمان که وضعیت احراز هویت تغییر کند، یک رویداد جدید با وضعیت کاربر به روز شده مطرح می شود.

    با گوش دادن به وضعیت احراز هویت، می توانید یک رابط کاربری بسازید که به این تغییرات در وضعیت احراز هویت واکنش نشان دهد.

  • شی UserCredential که با روش های احراز هویت ( signIn -) برگردانده می شود: شی UserCredential دارای یک ویژگی user با User فعلی است:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • ویژگی currentUser نمونه FirebaseAuth : اگر مطمئن هستید که کاربر در حال حاضر وارد سیستم شده است، می توانید از ویژگی currentUser به User دسترسی داشته باشید:

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    currentUser به دو دلیل می تواند null باشد:

    • کاربر وارد نشده است.
    • شی auth مقداردهی اولیه را به پایان نرسانده است. اگر از شنونده برای پیگیری وضعیت ورود به سیستم کاربر استفاده می کنید، نیازی به رسیدگی به این مورد ندارید.

اطلاعات نمایه ارائه دهنده خاص کاربر را دریافت کنید

برای دریافت اطلاعات نمایه بازیابی شده از ارائه دهندگان ورود به سیستم مرتبط با یک کاربر، از ویژگی providerData استفاده کنید. به عنوان مثال:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

به روز رسانی نمایه یک کاربر

می‌توانید اطلاعات اولیه نمایه کاربر - نام نمایشی کاربر و نشانی اینترنتی عکس نمایه - را با روش‌های update - به‌روزرسانی کنید. به عنوان مثال:

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

آدرس ایمیل کاربر را تنظیم کنید

می توانید آدرس ایمیل کاربر را با متد updateEmail() تنظیم کنید. به عنوان مثال:

await user?.updateEmail("janeq@example.com");

یک ایمیل تأیید برای کاربر ارسال کنید

می توانید با روش sendEmailVerification() یک ایمیل تأیید آدرس برای کاربر ارسال کنید. به عنوان مثال:

await user?.sendEmailVerification();

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

همچنین این امکان وجود دارد که وضعیت را از طریق URL ادامه دهید تا هنگام ارسال ایمیل تأیید به برنامه تغییر مسیر دهید.

علاوه بر این، می‌توانید با به‌روزرسانی کد زبان در نمونه Auth قبل از ارسال ایمیل، ایمیل تأیید را بومی‌سازی کنید. به عنوان مثال:

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

رمز عبور یک کاربر را تنظیم کنید

می توانید رمز عبور کاربر را با متد updatePassword() تنظیم کنید. به عنوان مثال:

await user?.updatePassword(newPassword);

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

شما می توانید با روش sendPasswordResetEmail() یک ایمیل بازنشانی رمز عبور برای کاربر ارسال کنید. به عنوان مثال:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

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

همچنین این امکان وجود دارد که وضعیت را از طریق URL ادامه دهید تا هنگام ارسال ایمیل بازنشانی رمز عبور به برنامه هدایت شوید.

علاوه بر این، می‌توانید با به‌روزرسانی کد زبان در نمونه Auth قبل از ارسال ایمیل، ایمیل بازنشانی رمز عبور را بومی‌سازی کنید. به عنوان مثال:

await FirebaseAuth.instance.setLanguageCode("fr");

همچنین می‌توانید ایمیل‌های بازنشانی رمز عبور را از کنسول Firebase ارسال کنید.

حذف یک کاربر

شما می توانید یک حساب کاربری را با روش delete() حذف کنید. به عنوان مثال:

await user?.delete();

همچنین می‌توانید کاربران را از بخش تأیید هویت کنسول Firebase در صفحه کاربران حذف کنید.

احراز هویت مجدد یک کاربر

برخی از اقدامات حساس امنیتی - مانند حذف یک حساب ، تنظیم یک آدرس ایمیل اصلی و تغییر رمز عبور - مستلزم این است که کاربر اخیراً وارد سیستم شده باشد. اگر یکی از این اقدامات را انجام دهید و کاربر خیلی وقت پیش وارد سیستم شده باشد، اقدام با شکست مواجه می شود و FirebaseAuthException با کد requires-recent-login پرتاب می کند. وقتی این اتفاق می‌افتد، با دریافت اعتبارنامه ورود به سیستم جدید از کاربر و ارسال اعتبار برای reauthenticate کاربر را دوباره احراز هویت کنید. به عنوان مثال:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

وارد کردن حساب های کاربری

با استفاده از دستور auth:import در Firebase CLI می توانید حساب های کاربری را از یک فایل به پروژه Firebase وارد کنید. به عنوان مثال:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14