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

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

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

  1. اضافه کردن فایربیس را به پروژه خود C ++ .
  2. اگر هنوز برنامه خود را متصل به پروژه فایربیس شما نیست، انجام این کار از کنسول فایربیس .
  3. ورود به سیستم ایمیل/رمز عبور را فعال کنید:
    1. در فایربیس کنسول ، باز کردن بخش تایید.
    2. بر روی ثبت نام در تب روش، فعال کردن ایمیل / رمز عبور ثبت نام در روش و روی Save کلیک کنید.

دسترسی به firebase::auth::Auth کلاس

Auth کلاس دروازه برای همه تماس API است.
  1. اضافه کردن فایل های هدر تایید و برنامه:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. در کد دهی اولیه خود، ایجاد یک firebase::App کلاس.
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. بدست آوردن firebase::auth::Auth کلاس برای خود firebase::App . یک نگاشت یک به یک بین App و Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

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

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

  1. هنگامی که کاربر جدیدی با استفاده از فرم ثبت نام برنامه شما ثبت نام می کند ، مراحل اعتبارسنجی حساب جدیدی را که برنامه شما نیاز دارد انجام دهید ، مانند تأیید اینکه رمز عبور جدید به درستی تایپ شده است و الزامات پیچیدگی شما را برآورده می کند.
  2. ایجاد یک حساب کاربری جدید با عبور از آدرس ایمیل کاربر جدید و رمز عبور برای Auth::CreateUserWithEmailAndPassword :
    firebase::Future<firebase::auth::User*> result =
        auth->CreateUserWithEmailAndPassword(email, password);
    
  3. اگر برنامه شما دارای یک حلقه به روز رسانی به طور منظم که اجرا می شود (می گویند در 30 یا 60 بار در ثانیه)، شما می توانید نتایج یک بار در هر به روز رسانی با بررسی Auth::CreateUserWithEmailAndPasswordLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->CreateUserWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Create user succeeded for email %s\n", user->email().c_str());
      } else {
        printf("Created user failed with error '%s'\n", result.error_message());
      }
    }
    
    یا، اگر برنامه شما است رویداد محور، شما ممکن است ترجیح می دهند به ثبت نام مخاطبین در آینده .

با یک آدرس ایمیل و رمز ورود به سیستم وارد شوید

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

  1. هنگامی که کاربری به برنامه خود را، عبور آدرس ایمیل کاربر و رمز عبور برای firebase::auth::Auth::SignInWithEmailAndPassword :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithEmailAndPassword(email, password);
    
  2. اگر برنامه شما دارای یک حلقه به روز رسانی به طور منظم که اجرا می شود (می گویند در 30 یا 60 بار در ثانیه)، شما می توانید نتایج یک بار در هر به روز رسانی با بررسی Auth::SignInWithEmailAndPasswordLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for email %s\n", user->email().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    یا، اگر برنامه شما است رویداد محور، شما ممکن است ترجیح می دهند به ثبت نام مخاطبین در آینده .

ثبت تماس در آینده

برخی از برنامه Update توابع است که 30 یا 60 بار در ثانیه به نام. به عنوان مثال ، بسیاری از بازی ها از این مدل پیروی می کنند. این برنامه ها می توانید پاسخ LastResult توابع به نظرسنجی تماس ناهمزمان. با این حال ، اگر برنامه شما رویداد محور است ، ممکن است ترجیح دهید عملکردهای تماس را ثبت کنید. یک تابع callback پس از اتمام آینده فراخوانی می شود.
void OnCreateCallback(const firebase::Future<firebase::auth::User*>& result,
                      void* user_data) {
  // The callback is called when the Future enters the `complete` state.
  assert(result.status() == firebase::kFutureStatusComplete);

  // Use `user_data` to pass-in program context, if you like.
  MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data);

  // Important to handle both success and failure situations.
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::User* user = *result.result();
    printf("Create user succeeded for email %s\n", user->email().c_str());

    // Perform other actions on User, if you like.
    firebase::auth::User::UserProfile profile;
    profile.display_name = program_context->display_name;
    user->UpdateUserProfile(profile);

  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

void CreateUser(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::User*> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // `&my_program_context` is passed verbatim to OnCreateCallback().
  result.OnCompletion(OnCreateCallback, &my_program_context);
}
تابع پاسخ به تماس نیز می توانید یک لامبدا شود، اگر شما ترجیح می دهید.
void CreateUserUsingLambda(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::User*> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // The lambda has the same signature as the callback function.
  result.OnCompletion(
      [](const firebase::Future<firebase::auth::User*>& 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 شما ذخیره می شود و می تواند برای شناسایی کاربر در هر برنامه ای در پروژه شما ، صرف نظر از نحوه ورود کاربر به سیستم ، مورد استفاده قرار گیرد.

  • در برنامه های خود را، شما می توانید اطلاعات نمایه کاربر از دریافت firebase::auth::User شی:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      std::string name = user->display_name();
      std::string email = user->email();
      std::string photo_url = user->photo_url();
      // 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 firebase::auth::User::Token() instead.
      std::string uid = user->uid();
    }
    
  • در خود پایگاه فایربیس بیدرنگ و ابر ذخیره سازی قوانین امنیتی ، شما می توانید دریافت امضا در شناسه کاربری منحصر به فرد کاربر را از auth متغیر، و استفاده از آن برای کنترل آنچه داده دسترسی کاربر می تواند.

شما می توانید اجازه به کاربران برای ورود به سیستم برنامه خود را با استفاده از ارائه دهندگان تأیید هویت چندگانه توسط ارتباط تایید اعتبار ارائه دهنده به یک حساب کاربری موجود.

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

auth->SignOut();