شما میتوانید با ادغام ورود عمومی OAuth در برنامه خود با استفاده از Firebase SDK، به کاربران خود اجازه دهید تا با استفاده از ارائهدهندگان OAuth مانند توییتر، با Firebase احراز هویت کنند تا جریان ورود به سیستم سرتاسری را انجام دهند.
قبل از اینکه شروع کنی
برای نصب و مدیریت وابستگیهای Firebase از Swift Package Manager استفاده کنید.
- در Xcode، با باز کردن پروژه برنامه خود، به File > Add Packages بروید.
- وقتی از شما خواسته شد، مخزن SDK پلتفرمهای اپل فایربیس را اضافه کنید:
- کتابخانه Firebase Authentication را انتخاب کنید.
- پرچم
-ObjCرا به بخش Other Linker Flags در تنظیمات ساخت هدف خود اضافه کنید. - پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگیهای شما در پسزمینه میکند.
https://github.com/firebase/firebase-ios-sdk.git
برای ورود کاربران با استفاده از حسابهای توییتر، ابتدا باید توییتر را به عنوان ارائهدهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
پادهای زیر را در
Podfileخود قرار دهید:pod 'FirebaseAuth'
- در کنسول Firebase ، بخش Auth را باز کنید.
- در برگه «روش ورود» ، ارائهدهنده توییتر را فعال کنید.
- کلید API و رمز API را از کنسول توسعهدهندهی آن ارائهدهنده به پیکربندی ارائهدهنده اضافه کنید:
- برنامه خود را به عنوان یک برنامه توسعهدهنده در توییتر ثبت کنید و کلید API OAuth و رمز API برنامه خود را دریافت کنید.
- مطمئن شوید که آدرس اینترنتی تغییر مسیر OAuth مربوط به Firebase شما (مثلاً
my-app-12345.firebaseapp.com/__/auth/handler) به عنوان آدرس اینترنتی فراخوانی مجوز (Auth callback URL) در صفحه تنظیمات برنامه در فایل پیکربندی برنامه توییتر شما تنظیم شده باشد.
- روی ذخیره کلیک کنید.
مدیریت جریان ورود به سیستم با Firebase SDK
برای مدیریت جریان ورود به سیستم با SDK پلتفرمهای اپل فایربیس، این مراحل را دنبال کنید:
طرحهای URL سفارشی را به پروژه Xcode خود اضافه کنید:
- پیکربندی پروژه خود را باز کنید: روی نام پروژه در نمای درختی سمت چپ دوبار کلیک کنید. برنامه خود را از بخش TARGETS انتخاب کنید، سپس تب Info را انتخاب کنید و بخش URL Types را باز کنید.
- روی دکمه + کلیک کنید و شناسه برنامه رمزگذاری شده خود را به عنوان یک طرح URL اضافه کنید. میتوانید شناسه برنامه رمزگذاری شده خود را در صفحه تنظیمات عمومی کنسول Firebase، در بخش برنامه iOS خود پیدا کنید. سایر فیلدها را خالی بگذارید.
پس از تکمیل، پیکربندی شما باید چیزی شبیه به موارد زیر باشد (اما با مقادیر خاص برنامه شما):

با استفاده از شناسه ارائه دهنده twitter.com، یک نمونه از OAuthProvider ایجاد کنید.
سویفت
var provider = OAuthProvider(providerID: "twitter.com")
هدف-سی
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"twitter.com"];
اختیاری : پارامترهای سفارشی اضافی OAuth را که میخواهید با درخواست OAuth ارسال کنید، مشخص کنید.
سویفت
provider.customParameters = [ "lang": "fr" ]
هدف-سی
[provider setCustomParameters:@{@"lang": @"fr"}];
برای پارامترهایی که توییتر پشتیبانی میکند، به مستندات OAuth توییتر مراجعه کنید. توجه داشته باشید که نمیتوانید پارامترهای مورد نیاز Firebase را با
setCustomParametersارسال کنید. این پارامترها client_id ، redirect_uri ، response_type ، scope و state هستند.اختیاری : اگر میخواهید نحوه نمایش
SFSafariViewControllerیاUIWebViewتوسط برنامه خود را هنگام نمایش reCAPTCHA به کاربر سفارشی کنید، یک کلاس سفارشی ایجاد کنید که با پروتکلAuthUIDelegateمطابقت داشته باشد و آن را بهcredentialWithUIDelegateمنتقل کنید.با استفاده از شیء ارائه دهنده OAuth، با Firebase احراز هویت کنید.
سویفت
provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth.auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // Twitter OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Twitter OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken // Twitter OAuth secret can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.secret } } }
هدف-سی
[provider getCredentialWithUIDelegate:nil completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { if (error) { // Handle error. } if (credential) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { if (error) { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // Twitter OAuth access token can also be retrieved by: // authResult.credential.accessToken // Twitter OAuth ID token can be retrieved by calling: // authResult.credential.idToken // Twitter OAuth secret can be retrieved by calling: // authResult.credential.secret }]; } }];
با استفاده از توکن دسترسی OAuth، میتوانید API توییتر را فراخوانی کنید.
برای مثال، برای دریافت اطلاعات اولیه پروفایل، میتوانید REST API را فراخوانی کنید و توکن دسترسی را در هدر
Authorizationارسال کنید:https://api.twitter.com/labs/1/users?usernames=TwitterDev
در حالی که مثالهای بالا بر جریانهای ورود به سیستم تمرکز دارند، شما همچنین میتوانید یک ارائهدهنده توییتر را به یک کاربر موجود پیوند دهید. به عنوان مثال، میتوانید چندین ارائهدهنده را به یک کاربر پیوند دهید و به آنها اجازه دهید با هر یک از آنها وارد سیستم شوند.
سویفت
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // Twitter credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // Twitter OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Twitter OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken // Twitter OAuth secret can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.secret }
هدف-سی
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // Twitter credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // Twitter OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // Twitter OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken // Twitter OAuth secret can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).secret }];
همین الگو را میتوان با
reauthenticateWithCredentialنیز استفاده کرد که میتواند برای بازیابی اعتبارنامههای جدید برای عملیات حساسی که نیاز به ورود اخیر دارند، استفاده شود.سویفت
Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Twitter OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken // Twitter OAuth secret can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.secret }
هدف-سی
[[FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // Twitter OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken // Twitter OAuth secret can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).secret }];
مراحل بعدی
پس از اینکه کاربر برای اولین بار وارد سیستم میشود، یک حساب کاربری جدید ایجاد میشود و به اطلاعات احراز هویت - یعنی نام کاربری و رمز عبور، شماره تلفن یا اطلاعات ارائه دهنده مجوز - که کاربر با آن وارد سیستم شده است، پیوند داده میشود. این حساب جدید به عنوان بخشی از پروژه Firebase شما ذخیره میشود و میتواند برای شناسایی کاربر در هر برنامه در پروژه شما، صرف نظر از نحوه ورود کاربر، مورد استفاده قرار گیرد.
در برنامههای خود، میتوانید اطلاعات اولیه پروفایل کاربر را از شیء
Userدریافت کنید. به بخش مدیریت کاربران مراجعه کنید.در قوانین امنیتی پایگاه داده و Cloud Storage Firebase Realtime Database ، میتوانید شناسه کاربری منحصر به فرد کاربر وارد شده را از متغیر
authدریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد، استفاده کنید.
برای خروج از سیستم کاربر، تابع signOut: را فراخوانی کنید.
سویفت
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
هدف-سی
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین میتوانید کد مدیریت خطا را برای طیف کامل خطاهای احراز هویت اضافه کنید. به بخش مدیریت خطاها مراجعه کنید.