میتوانید به کاربران خود اجازه دهید با Firebase با استفاده از ارائهدهندگان OAuth مانند Yahoo با یکپارچهسازی OAuth Login عمومی مبتنی بر وب در برنامه خود با استفاده از Firebase SDK برای انجام جریان ورود به سیستم از انتها به سیستم، احراز هویت کنند. از آنجایی که این جریان به استفاده از SDK های Firebase مبتنی بر تلفن نیاز دارد، فقط در پلتفرم های اندروید و اپل پشتیبانی می شود.
قبل از اینکه شروع کنی
- Firebase را به پروژه C++ خود اضافه کنید .
- در کنسول Firebase ، بخش Auth را باز کنید.
- در زبانه روش ورود به سیستم، ارائه دهنده یاهو را فعال کنید.
- شناسه مشتری و Client Secret را از کنسول توسعه دهنده آن ارائه دهنده به پیکربندی ارائه دهنده اضافه کنید:
برای ثبت نام سرویس گیرنده Yahoo OAuth، مستندات توسعه دهنده Yahoo را در مورد ثبت یک برنامه وب در Yahoo دنبال کنید.
حتماً دو مجوز OpenID Connect API را انتخاب کنید:
profile
وemail
.- هنگام ثبت برنامه در این ارائه دهندگان، مطمئن شوید که دامنه
*.firebaseapp.com
را برای پروژه خود به عنوان دامنه تغییر مسیر برای برنامه خود ثبت کنید.
- روی ذخیره کلیک کنید.
دسترسی به firebase::auth::Auth
کلاس 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);
با Firebase SDK، جریان ورود به سیستم را مدیریت کنید
برای مدیریت جریان ورود به سیستم با Firebase SDK، این مراحل را دنبال کنید:
نمونه ای از
FederatedOAuthProviderData
پیکربندی شده با شناسه ارائه دهنده مناسب برای Yahoo بسازید.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);
اختیاری : پارامترهای سفارشی OAuth اضافی را که می خواهید با درخواست OAuth ارسال کنید، مشخص کنید.
// Prompt user to re-authenticate to Yahoo. provider_data.custom_parameters["prompt"] = "login"; // Localize to French. provider_data.custom_parameters["language"] = "fr";
برای پارامترهایی که یاهو پشتیبانی می کند، به اسناد Yahoo OAuth مراجعه کنید. توجه داشته باشید که نمیتوانید پارامترهای مورد نیاز Firebase را با
custom_parameters()
کنید. این پارامترها عبارتند از client_id , redirect_uri , answer_type , scope و state .اختیاری : دامنه های OAuth 2.0 اضافی را فراتر از
profile
وemail
که می خواهید از ارائه دهنده احراز هویت درخواست کنید، مشخص کنید. اگر برنامه شما نیاز به دسترسی به دادههای کاربر خصوصی از APIهای یاهو دارد، باید مجوزهای APIهای یاهو را تحت مجوزهای API در کنسول توسعهدهنده یاهو درخواست کنید. دامنه های درخواستی OAuth باید دقیقاً مطابق با موارد از پیش پیکربندی شده در مجوزهای API برنامه باشد. به عنوان مثال، اگر دسترسی خواندن/نوشتن به مخاطبین کاربر درخواست شود و از قبل در مجوزهای API برنامه پیکربندی شده باشد، به جایsdct-r
دامنه OAuth فقط خواندنی،sdct-w
ارسال شود. در غیر این صورت، جریان با شکست مواجه می شود و یک خطا به کاربر نهایی نشان داده می شود.// Request access to Yahoo Mail API. provider_data.scopes.push_back("mail-r"); // This must be preconfigured in the app's API permissions. provider_data.scopes.push_back("sdct-w");
برای کسب اطلاعات بیشتر، به مستندات حوزه یاهو مراجعه کنید.
هنگامی که داده های ارائه دهنده شما پیکربندی شد، از آن برای ایجاد یک FederatedOAuthProvider استفاده کنید.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
با استفاده از شی ارائه دهنده Auth با Firebase احراز هویت کنید. توجه داشته باشید که بر خلاف سایر عملیات FirebaseAuth، با نمایش یک نمای وب که در آن کاربر میتواند اعتبار خود را وارد کند، رابط کاربری شما را کنترل میکند.
برای شروع جریان ورود به سیستم،
signInWithProvider
:firebase::Future<firebase::auth::SignInResult> result = auth->SignInWithProvider(provider_data);
سپس درخواست شما ممکن است منتظر بماند یا یک تماس برگشتی در Future ثبت کند.
در حالی که مثالهای بالا بر جریانهای ورود تمرکز دارند، شما همچنین میتوانید با استفاده از
LinkWithProvider
یک ارائهدهنده یاهو را به یک کاربر موجود پیوند دهید. برای مثال، میتوانید چندین ارائهدهنده را به یک کاربر پیوند دهید و به آنها اجازه دهید با هر یک از آنها وارد سیستم شوند.firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
همین الگو را می توان با
ReauthenticateWithProvider
استفاده کرد که می تواند برای بازیابی اعتبارنامه های جدید برای عملیات حساسی که نیاز به ورود اخیر دارند استفاده شود.firebase::Future<firebase::auth::SignInResult> result = user->ReauthenticateWithProvider(provider_data);
سپس درخواست شما ممکن است منتظر بماند یا یک تماس برگشتی در Future ثبت کند.
مراحل بعدی
پس از اینکه کاربر برای اولین بار وارد سیستم شد، یک حساب کاربری جدید ایجاد میشود و به اعتبارنامهها (یعنی نام کاربری و رمز عبور، شماره تلفن یا اطلاعات ارائهدهنده تاییدیه) مرتبط میشود که کاربر با آن وارد شده است. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در همه برنامههای پروژهتان، صرف نظر از نحوه ورود کاربر به سیستم استفاده کرد.
در برنامه های خود، می توانید اطلاعات اولیه نمایه کاربر را از
firebase::auth::User
object: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(); }
در قوانین امنیتی Firebase Realtime Database و Cloud Storage، میتوانید شناسه کاربری منحصر به فرد کاربر واردشده به سیستم را از متغیر
auth
دریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آن دسترسی داشته باشد استفاده کنید.
میتوانید به کاربران اجازه دهید با استفاده از چندین ارائهدهنده احراز هویت، با پیوند دادن اعتبار ارائهدهنده تأیید اعتبار به یک حساب کاربری موجود، به برنامه شما وارد شوند.
برای خروج از سیستم کاربر، SignOut()
را فراخوانی کنید:
auth->SignOut();