احراز هویت با Firebase بااستفاده از «حساب‌های مبتنی بر گذرواژه» بااستفاده از Unity

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

قبل از شروع

پیش‌از اینکه بتوانید از Firebase Authentication استفاده کنید، باید:

  • پروژه Unity خود را ثبت کنید و آن را برای استفاده از Firebase پیکربندی کنید.

    • اگر پروژه Unity شما ازقبل از Firebase استفاده می‌کند، پس ازقبل برای Firebase ثبت و پیکربندی شده است.

    • اگر پروژه Unity ندارید، می‌توانید برنامه نمونه‌ای را بارگیری کنید.

  • Firebase Unity SDK (به‌طور دقیق، FirebaseAuth.unitypackage) را به پروژه Unity خود اضافه کنید.

توجه داشته باشید که افزودن Firebase به پروژه Unity شما شامل وظایفی در هر دو Firebase کنسول و پروژه Unity باز شما است (برای مثال، فایل‌های پیکربندی Firebase را از کنسول بارگیری می‌کنید، سپس آن‌ها را به پروژه Unity خود منتقل می‌کنید).

دسترسی به کلاس Firebase.Auth.FirebaseAuth

کلاس FirebaseAuth دروازه همه فراخوانی‌های API است. ازطریق FirebaseAuth.DefaultInstance قابل‌دسترسی است.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

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

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

  1. وقتی کاربر جدیدی بااستفاده از فرم ثبت‌نام برنامه شما ثبت‌نام می‌کند، مراحل جدید اعتبارسنجی حساب را که برنامه شما نیاز دارد تکمیل کنید، مثلاً تأیید کنید که گذرواژه حساب جدید به‌درستی تایپ شده است و الزامات پیچیدگی شما را برآورده می‌کند.
  2. با ارسال گذرواژه و نشانی ایمیل کاربر جدید به FirebaseAuth.CreateUserWithEmailAndPassword، حساب جدیدی ایجاد کنید:
    auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      // Firebase user has been created.
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

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

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

  1. وقتی کاربری به سیستم برنامه‌تان وارد می‌شود، نشانی ایمیل و گذرواژه کاربر را به FirebaseAuth.SignInWithEmailAndPassword ارسال کنید:
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
  2. همچنین می‌توانید اطلاعات اعتباری را ایجاد کنید و مانند گردش‌های کاری دیگر به سیستم وارد شوید:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

مراحل بعدی

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

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

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • در Firebase Realtime Database و Cloud Storage قوانین امنیتی، می‌توانید شناسه کاربر یکتای کاربر واردشده به سیستم را از متغیر auth دریافت کنید و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آن‌ها دسترسی داشته باشد استفاده کنید.

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

برای خروج از سیستم کاربر، SignOut() را فراخوانی کنید:

auth.SignOut();