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

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

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

  1. اضافه کردن فایربیس را به پروژه خود C ++ .
  2. کلیدهای سرور پروژه خود را دریافت کنید:
    1. برو به حسابهای سرویس صفحه در تنظیمات پروژه خود را.
    2. کلیک کنید تولید جدید کلید خصوصی در پایین بخش فایربیس محیط مدیریت SDK صفحه حسابهای سرویس.
    3. جفت کلید عمومی/خصوصی حساب سرویس جدید به طور خودکار در رایانه شما ذخیره می شود. این فایل را در سرور احراز هویت خود کپی کنید.

احراز هویت با Firebase

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);
    
پاسخ Auth::SignInWithCustomToken با این نشانه رمز از سرور احراز هویت خود را.
  1. وقتی کاربران به برنامه شما وارد می شوند ، اطلاعات ورود به سیستم خود (به عنوان مثال ، نام کاربری و رمز عبور خود) را به سرور احراز هویت خود ارسال کنید. چک سرور شما اعتبار و بازده یک سفارشی رمز اگر آنها معتبر هستند.
  2. پس از شما در سفارشی نشانه از سرور احراز هویت خود را دریافت، آن را به Auth::SignInWithCustomToken به ثبت نام در کاربر:
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. اگر برنامه شما دارای یک حلقه به روز رسانی به طور منظم که اجرا می شود (می گویند در 30 یا 60 بار در ثانیه)، شما می توانید نتایج یک بار در هر به روز رسانی با بررسی Auth::SignInWithCustomTokenLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for `%s`\n", user->display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    یا، اگر برنامه شما است رویداد محور، شما ممکن است ترجیح می دهند به ثبت نام مخاطبین در آینده .

مراحل بعدی

پس از ورود کاربر برای اولین بار ، یک حساب کاربری جدید ایجاد می شود و به اعتبارنامه - یعنی نام کاربری و گذرواژه ، شماره تلفن یا اطلاعات ارائه دهنده تأیید - که کاربر با آن وارد شده است پیوند داده می شود. این حساب جدید به عنوان بخشی از پروژه 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();