با ادغام «ورود به سیستم OAuth» عمومی در برنامهتان بااستفاده از «کیت توسعه نرمافزار Firebase» برای اجرای جریان ورود به سیستم سرتاسر، میتوانید به کاربران اجازه دهید بااستفاده از ارائهدهندگان OAuth مانند GitHub، با Firebase اصالتسنجی کنند.
قبل از شروع
برای ورود به سیستم کاربران بااستفاده از حسابهای GitHub، ابتدا باید GitHub را بهعنوان ارائهدهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
از Swift Package Manager برای نصب و مدیریت وابستگیهای Firebase استفاده کنید.
- در Xcode، درحالیکه پروژه برنامهتان باز است، به File > Add Packages (فایل > افزودن بستهها) بروید.
- وقتی خواسته شد، مخزن کیت توسعه نرمافزار Firebase برای پلاتفرمهای Apple را اضافه کنید:
- کتابخانه Firebase Authentication را انتخاب کنید.
- پرچم
-ObjCرا به بخش Other Linker Flags (سایر پرچمهای پیونددهنده) در تنظیمات ساخت هدف اضافه کنید. - وقتی تمام شد، Xcode بهطور خودکار شروع به حل و بارگیری وابستگیهای شما در پسزمینه میکند.
https://github.com/firebase/firebase-ios-sdk.git
اکنون، چند مرحله پیکربندی را انجام دهید:
- در کنسول Firebase، به امنیت > اصالتسنجی بروید.
- در برگه روش ورود به سیستم، ارائهدهنده ورود به سیستم GitHub را فعال کنید.
-
شناسه کارخواه و رمز کارخواه را از کنسول توسعهدهنده آن ارائهدهنده به پیکربندی ارائهدهنده اضافه کنید:
- برنامهتان را بهعنوان برنامه توسعهدهنده در GitHub ثبت کنید و شناسه کارخواه و رمز کارخواه OAuth 2.0 برنامهتان را دریافت کنید.
-
مطمئن شوید URI تغییرمسیر OAuth Firebase شما (برای مثال،
my-app-12345.firebaseapp.com/__/auth/handler) بهعنوان نشانی وب فراخوانی برگشتی «اجازهنامه» در صفحه تنظیمات برنامهتان در پیکربندی برنامه GitHub شما تنظیم شده باشد.
- روی ذخیره کردن کلیک کنید.
جریان ورود به سیستم را با کیت توسعه نرمافزار Firebase مدیریت کنید
برای مدیریت جریان ورود به سیستم با کیت توسعه نرمافزار Firebase برای پلاتفرمهای Apple، این مراحل را دنبال کنید:
طرحوارههای نشانی وب سفارشی را به پروژه Xcode خود اضافه کنید:
- پیکربندی پروژه را باز کنید: روی نام پروژه در نمای درختی سمت راست دوکلیک کنید. برنامهتان را از بخش TARGETS انتخاب کنید، سپس برگه Info را انتخاب کنید و بخش URL Types را ازهم باز کنید.
-
روی دکمه + کلیک کنید و «شناسه برنامه کدگذاریشده» خود را بهعنوان طرحواره نشانی وب اضافه کنید.
فیلدهای دیگر را خالی بگذارید.
میتوانید «شناسه برنامه کدبندیشده» را در کنسول Firebase پیدا کنید: به
تنظیمات > برگه موارد کلی بروید، سپس به بخش برنامههای شما پیمایش کنید تا جزئیات مربوط به برنامه iOS خود را مشاهده کنید.پساز تکمیل، پیکربندی شما باید چیزی شبیه به موارد زیر باشد (اما با مقادیر مختص برنامهتان):
بااستفاده از شناسه ارائهدهنده github.com، نمونهای از OAuthProvider ایجاد کنید.
Swift
var provider = OAuthProvider(providerID: "github.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
اختیاری: پارامترهای OAuth سفارشی دیگری را که میخواهید با درخواست OAuth ارسال شود مشخص کنید.
Swift
provider.customParameters = [ "allow_signup": "false" ]
Objective-C
[provider setCustomParameters:@{@"allow_signup": @"false"}];
برای پارامترهایی که GitHub پشتیبانی میکند، اسناد GitHub OAuth را ببینید. توجه داشته باشید که نمیتوانید پارامترهای الزامی Firebase را با
setCustomParametersارسال کنید. این پارامترها عبارتاند از client_id، redirect_uri، response_type، scope، و state.اختیاری: دامنههای OAuth 2.0 دیگری را علاوهبر نمایه اصلی که میخواهید از ارائهدهنده اصالتسنجی درخواست کنید مشخص کنید. اگر برنامه شما به دسترسی به دادههای خصوصی کاربر از GitHub API نیاز دارد، باید درخواست اجازههای دسترسی به GitHub API را در بخش اجازههای API در کنسول توسعهدهنده GitHub ارسال کنید. گسترههای OAuth درخواستشده باید دقیقاً با گسترههای ازپیشپیکربندیشده در اجازههای میانای برنامهسازی کاربردی برنامه مطابقت داشته باشد.
Swift
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = ["user:email"]
Objective-C
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. [provider setScopes:@[@"user:email"]];
برای کسب اطلاعات بیشتر، به اسناد دامنههای GitHub مراجعه کنید.
اختیاری: اگر میخواهید نحوه ارائه
SFSafariViewControllerیاUIWebViewتوسط برنامهتان را هنگام نمایش reCAPTCHA به کاربر سفارشیسازی کنید، کلاس سفارشیای ایجاد کنید که با پروتکلAuthUIDelegateمطابقت داشته باشد و آن را بهcredentialWithUIDelegateارسال کنید.بااستفاده از شیء ارائهدهنده OAuth، با Firebase اصالتسنجی کنید.
Swift
provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. guard let oauthCredential = authResult.credential as? OAuthCredential else { return } // GitHub OAuth access token can also be retrieved by: // oauthCredential.accessToken // GitHub OAuth ID token can be retrieved by calling: // oauthCredential.idToken } } }
Objective-C
[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. FIROAuthCredential *oauthCredential = (FIROAuthCredential *)authResult.credential; // GitHub OAuth access token can also be retrieved by: // oauthCredential.accessToken // GitHub OAuth ID token can be retrieved by calling: // oauthCredential.idToken }]; } }];
بااستفاده از کد دسترسی OAuth، میتوانید GitHub API را فراخوانی کنید.
برای مثال، برای دریافت اطلاعات نمایه پایه، میتوانید REST API را فراخوانی کنید، و کد دسترسی را در سرصفحه
Authorizationارسال کنید:https://api.github.com/user
درحالیکه مثالهای بالا بر جریانهای ورود به سیستم تمرکز دارند، شما همچنین میتوانید یک ارائهدهنده GitHub را به یک کاربر موجود پیوند دهید. برای مثال، میتوانید چندین ارائهدهنده را به یک کاربر پیوند دهید تا بتواند با هرکدام از آنها به سیستم وارد شود.
Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // GitHub credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // GitHub OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // GitHub OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // GitHub credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // GitHub OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // GitHub OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
از همین الگو میتوان با
reauthenticateWithCredentialاستفاده کرد که میتوان از آن برای بازیابی اعتبارنامههای جدید برای عملیات حساس که نیاز به ورود به سیستم اخیر دارند استفاده کرد.Swift
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 // GitHub OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[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 // GitHub OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
مراحل بعدی
پساز اینکه کاربر برای اولینبار به سیستم وارد شد، حساب کاربری جدیدی ایجاد میشود و به اطلاعات اعتباری (یعنی نام کاربری و گذرواژه، شماره تلفن، یا اطلاعات ارائهدهنده احراز هویت) که کاربر با آن به سیستم وارد شده است پیوند داده میشود. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در هر برنامه در پروژه شما، صرفنظر از نحوه ورود کاربر به سیستم، استفاده کرد.
-
در برنامههایتان، میتوانید اطلاعات نمایه پایه کاربر را از شیء
Userدریافت کنید. مدیریت کاربران را ببینید. در Firebase Realtime Database و Cloud Storage قوانین امنیتی، میتوانید شناسه کاربر منحصربهفرد کاربر واردشده به سیستم را از متغیر
authدریافت کنید، و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد استفاده کنید.
میتوانید به کاربران اجازه دهید بااستفاده از چندین ارائهدهنده اصالتسنجی به سیستم برنامهتان وارد شوند. برای این کار، اعتبارنامه ارائهدهنده اصالتسنجی را به حساب کاربری موجود پیوند دهید.
برای خارج کردن کاربر از سیستم،
signOut: را فراخوانی کنید.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین ممکن است بخواهید کد رسیدگی به خطا را برای طیف کامل خطاهای اصالتسنجی اضافه کنید. رسیدگی به خطاها را ببینید.