شما میتوانید Firebase Authentication با یک سیستم احراز هویت سفارشی ادغام کنید، به این صورت که سرور احراز هویت خود را طوری تغییر دهید که وقتی کاربر با موفقیت وارد سیستم میشود، توکنهای امضا شده سفارشی تولید کند. برنامه شما این توکن را دریافت کرده و از آن برای احراز هویت با فایربیس استفاده میکند.
قبل از اینکه شروع کنی
- فایربیس را به پروژه ++C خود اضافه کنید .
- کلیدهای سرور پروژه خود را دریافت کنید:
- در کنسول Firebase ، به مسیر زیر بروید:
> برگه حسابهای سرویس . - در پایین بخش Firebase Admin SDK ، روی «ایجاد کلید خصوصی جدید» کلیک کنید.
- جفت کلید عمومی/خصوصی حساب سرویس جدید به طور خودکار در رایانه شما ذخیره میشود. این فایل را در سرور احراز هویت خود کپی کنید.
- در کنسول Firebase ، به مسیر زیر بروید:
احراز هویت با فایربیس
کلاسAuth دروازهای برای تمام فراخوانیهای API است.- فایلهای هدر Auth و App را اضافه کنید:
#include "firebase/app.h" #include "firebase/auth.h"
- در کد مقداردهی اولیه خود، یک کلاس
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__)
- کلاس
firebase::auth::Authرا برایfirebase::Appخود دریافت کنید. یک نگاشت یک به یک بینAppوAuthوجود دارد.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Auth::SignInWithCustomToken با توکنی که از سرور احراز هویت شما دریافت شده است، فراخوانی کنید.- وقتی کاربران وارد برنامه شما میشوند، اطلاعات ورود آنها (مثلاً نام کاربری و رمز عبور) را به سرور احراز هویت شما ارسال میکنند. سرور شما اطلاعات را بررسی میکند و در صورت معتبر بودن، یک توکن سفارشی برمیگرداند.
- پس از دریافت توکن سفارشی از سرور احراز هویت خود، آن را به
Auth::SignInWithCustomTokenارسال کنید تا کاربر وارد سیستم شود:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomToken(custom_token);
- اگر برنامه شما یک حلقه بهروزرسانی دارد که مرتباً اجرا میشود (مثلاً 30 یا 60 بار در ثانیه)، میتوانید نتایج را یک بار در هر بهروزرسانی با
Auth::SignInWithCustomTokenLastResultبررسی کنید: یا اگر برنامه شما رویداد محور است، ممکن است ترجیح دهید یک فراخوانی مجدد در Future ثبت کنید .firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomTokenLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::AuthResult auth_result = *result.result(); printf("Sign in succeeded for `%s`\n", auth_result.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.is_valid()) { 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(); }
در قوانین امنیتی پایگاه داده و Cloud Storage Firebase Realtime Database ، میتوانید شناسه کاربری منحصر به فرد کاربر وارد شده را از متغیر
authدریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد، استفاده کنید.
برای خروج کاربر، تابع SignOut() را فراخوانی کنید:
auth->SignOut();