با Firebase Authentication در C++ شروع کنید

شما می‌توانید Firebase Authentication استفاده کنید تا به کاربران اجازه دهید با استفاده از یک یا چند روش ورود به سیستم، از جمله ورود با آدرس ایمیل و رمز عبور، و ارائه دهندگان هویت فدرال مانند ورود به سیستم گوگل و ورود به سیستم فیسبوک، وارد برنامه شما شوند. این آموزش با نشان دادن نحوه اضافه کردن ورود با آدرس ایمیل و رمز عبور به برنامه، شما را با Firebase Authentication آشنا می‌کند.

پروژه C++ خود را به Firebase متصل کنید

قبل از اینکه بتوانید Firebase Authentication استفاده کنید، باید:

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

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

  • کیت توسعه نرم‌افزاری Firebase C++ را به پروژه C++ خود اضافه کنید.

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

ثبت نام کاربران جدید

فرمی ایجاد کنید که به کاربران جدید اجازه دهد با استفاده از آدرس ایمیل و رمز عبور خود در برنامه شما ثبت نام کنند. وقتی کاربر فرم را تکمیل می‌کند، آدرس ایمیل و رمز عبور ارائه شده توسط کاربر را اعتبارسنجی کنید، سپس آنها را به متد CreateUserWithEmailAndPassword ارسال کنید:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPassword(email, password);

شما می‌توانید وضعیت عملیات ایجاد حساب کاربری را یا با ثبت یک تابع فراخوانی (callback) در شیء CreateUserWithEmailAndPasswordLastResult Future بررسی کنید، یا اگر در حال نوشتن یک بازی یا برنامه با نوعی حلقه به‌روزرسانی دوره‌ای هستید، با نظرسنجی (polling) وضعیت در حلقه به‌روزرسانی.

برای مثال، با استفاده از یک آینده:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& result,
       void* user_data) {
      // `user_data` is the same as &my_program_context, below.
      // Note that we can't capture this value in the [] because std::function
      // is not supported by our minimum compiler spec (which is pre C++11).
      MyProgramContext* program_context =
          static_cast<MyProgramContext*>(user_data);

      // Process create user result...
      (void)program_context;
    },
    &my_program_context);

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

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

ورود کاربران فعلی

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

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithEmailAndPassword(email, password);

نتیجه عملیات ورود را به همان روشی که نتیجه ثبت نام را دریافت کردید، دریافت کنید.

تنظیم یک شنونده وضعیت احراز هویت و دریافت داده‌های حساب

برای پاسخ به رویدادهای ورود و خروج، یک شنونده (listener) به شیء احراز هویت سراسری (global authentication object) متصل کنید. این شنونده هر زمان که وضعیت ورود کاربر تغییر کند، فراخوانی می‌شود. از آنجا که شنونده فقط پس از مقداردهی اولیه کامل شیء احراز هویت و پس از اتمام هرگونه فراخوانی شبکه اجرا می‌شود، بهترین مکان برای دریافت اطلاعات در مورد کاربر وارد شده است.

با پیاده‌سازی کلاس انتزاعی firebase::auth::AuthStateListener شنونده (listener) را ایجاد کنید. برای مثال، برای ایجاد شنونده‌ای که هنگام ورود موفقیت‌آمیز کاربر، اطلاعات مربوط به او را دریافت می‌کند:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User user = auth.current_user();
    if (user.is_valid()) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
      const std::string displayName = user.DisplayName();
      const std::string emailAddress = user.Email();
      const std::string photoUrl = user.PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

شنونده را با متد AddAuthStateListener شیء firebase::auth::Auth متصل کنید:

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

مراحل بعدی

یاد بگیرید چگونه پشتیبانی از سایر ارائه دهندگان هویت و حساب‌های مهمان ناشناس را اضافه کنید: