با Firebase به صورت ناشناس احراز هویت

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

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

  1. اگر هنوز این کار را نکرده‌اید، مراحل موجود در راهنمای شروع به کار را دنبال کنید.

  2. فعال کردن ورود ناشناس:

    • در بخش احراز هویت (Authentication) کنسول فایربیس، صفحه متد ورود (Sign in method) را باز کنید.
    • از صفحه روش ورود ، روش ورود ناشناس را فعال کرده و روی ذخیره کلیک کنید.

احراز هویت با فایربیس به صورت ناشناس

وقتی کاربری که از سیستم خارج شده است از یک ویژگی برنامه استفاده می‌کند که نیاز به احراز هویت با Firebase دارد، با فراخوانی signInAnonymously() به صورت ناشناس وارد سیستم شوید:

try {
  final userCredential =
      await FirebaseAuth.instance.signInAnonymously();
  print("Signed in with temporary account.");
} on FirebaseAuthException catch (e) {
  switch (e.code) {
    case "operation-not-allowed":
      print("Anonymous auth hasn't been enabled for this project.");
      break;
    default:
      print("Unknown error.");
  }
}

تبدیل حساب کاربری ناشناس به حساب کاربری دائمی

وقتی یک کاربر ناشناس در برنامه شما ثبت نام می‌کند، ممکن است بخواهید به او اجازه دهید تا با حساب جدیدش به کار خود ادامه دهد - برای مثال، ممکن است بخواهید مواردی را که کاربر قبل از ثبت نام به سبد خرید خود اضافه کرده است، در سبد خرید حساب جدیدش نیز موجود کنید. برای انجام این کار، مراحل زیر را انجام دهید:

  1. وقتی کاربر ثبت‌نام می‌کند، جریان ورود به سیستم را برای ارائه‌دهنده‌ی احراز هویت کاربر تا فراخوانی یکی از متدهای signInWith - تکمیل کنید، اما این شامل این موارد نمی‌شود. برای مثال، توکن شناسه گوگل، توکن دسترسی فیس‌بوک یا آدرس ایمیل و رمز عبور کاربر را دریافت کنید.

  2. یک شیء Credential برای ارائه‌دهنده‌ی احراز هویت جدید دریافت کنید:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  3. شیء Credential را به متد linkWithCredential() کاربر در حال ورود به سیستم ارسال کنید:

    try {
      final userCredential = await FirebaseAuth.instance.currentUser
          ?.linkWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case "provider-already-linked":
          print("The provider has already been linked to the user.");
          break;
        case "invalid-credential":
          print("The provider's credential is not valid.");
          break;
        case "credential-already-in-use":
          print("The account corresponding to the credential already exists, "
              "or is already linked to a Firebase User.");
          break;
        // See the API reference for the full list of error codes.
        default:
          print("Unknown error.");
      }
      ```
    

اگر فراخوانی linkWithCredential() با موفقیت انجام شود، حساب کاربری جدید کاربر می‌تواند به داده‌های Firebase حساب کاربری ناشناس دسترسی پیدا کند.

مراحل بعدی

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

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

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

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

برای خروج کاربر، تابع signOut() را فراخوانی کنید:

await FirebaseAuth.instance.signOut();