میتوانید از Firebase Authentication برای ورود به سیستم استفاده کنید و با ارسال یک ایمیل حاوی یک پیوند به او، کاربر میتواند روی آن کلیک کند تا وارد شود. در این فرآیند، آدرس ایمیل کاربر نیز تأیید میشود.
ورود از طریق ایمیل مزایای زیادی دارد:
- ثبت نام و ورود به سیستم با اصطکاک کم.
- خطر کمتر استفاده مجدد از رمز عبور در بین برنامهها، که میتواند امنیت رمزهای عبور انتخاب شده را نیز تضعیف کند.
- امکان احراز هویت یک کاربر و همچنین تأیید اینکه کاربر مالک قانونی آدرس ایمیل است.
- یک کاربر برای ورود فقط به یک حساب ایمیل قابل دسترسی نیاز دارد. مالکیت شماره تلفن یا حساب رسانه اجتماعی مورد نیاز نیست.
- یک کاربر می تواند بدون نیاز به ارائه (یا به خاطر سپردن) رمز عبور، به طور ایمن وارد سیستم شود، که ممکن است در یک دستگاه تلفن همراه دست و پا گیر باشد.
- کاربر موجودی که قبلاً با یک شناسه ایمیل (رمز عبور یا فدرال) وارد شده است را می توان ارتقا داد تا فقط با ایمیل وارد شود. به عنوان مثال، کاربری که رمز عبور خود را فراموش کرده است همچنان می تواند بدون نیاز به بازنشانی رمز عبور خود وارد سیستم شود.
قبل از شروع
برای نصب و مدیریت وابستگی های Firebase از Swift Package Manager استفاده کنید.
- در Xcode، با باز بودن پروژه برنامه، به File > Add Packages بروید.
- هنگامی که از شما خواسته شد، مخزن SDK پلتفرم های Apple Firebase را اضافه کنید:
- کتابخانه Firebase Authentication را انتخاب کنید.
- پرچم
-ObjC
را به بخش Other Linker Flags تنظیمات ساخت هدف خود اضافه کنید. - پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگی های شما در پس زمینه می کند.
https://github.com/firebase/firebase-ios-sdk.git
ورود به سیستم Email Link را برای پروژه Firebase خود فعال کنید
برای ورود کاربران از طریق پیوند ایمیل، ابتدا باید روش ورود ارائه دهنده ایمیل و پیوند ایمیل را برای پروژه Firebase خود فعال کنید:
- در کنسول Firebase ، بخش Auth را باز کنید.
- در برگه روش ورود به سیستم ، ارائه دهنده ایمیل/گذرواژه را فعال کنید. توجه داشته باشید که ورود ایمیل/رمز عبور برای استفاده از ورود به سیستم پیوند ایمیل باید فعال باشد.
- در همان بخش، روش ورود به سیستم پیوند ایمیل (ورود بدون رمز عبور) را فعال کنید.
- روی ذخیره کلیک کنید.
یک پیوند احراز هویت به آدرس ایمیل کاربر ارسال کنید
برای شروع جریان احراز هویت، رابطی را به کاربر ارائه دهید که از کاربر می خواهد آدرس ایمیل خود را ارائه دهد و سپس sendSignInLink
فراخوانی می کند تا از Firebase درخواست کند که پیوند احراز هویت را به ایمیل کاربر ارسال کند.
شی
ActionCodeSettings
را بسازید، که دستورالعملهایی را در مورد نحوه ساخت پیوند ایمیل به Firebase ارائه میدهد. فیلدهای زیر را تنظیم کنید:-
url
: پیوند عمیق برای جاسازی و هر حالت اضافی که باید همراه آن منتقل شود. دامنه پیوند باید در لیست دامنه های مجاز Firebase Console قرار گیرد که با رفتن به برگه روش ورود (Authentication -> Sign-in) می توانید آن را پیدا کنید. -
iOSBundleID
وandroidPackageName
: به Firebase Authentication کمک میکند تا تعیین کند آیا باید یک پیوند فقط وب یا تلفن همراه ایجاد کند که در دستگاه Android یا Apple باز شود. -
handleCodeInApp
: روی true تنظیم کنید. عملیات ورود به سیستم برخلاف سایر اقدامات ایمیل خارج از باند (بازنشانی رمز عبور و تأیید ایمیل) باید همیشه در برنامه تکمیل شود. این به این دلیل است که در پایان جریان، انتظار می رود کاربر وارد سیستم شود و وضعیت Auth او در برنامه باقی بماند. -
linkDomain
: زمانی که دامنههای پیوند Hosting سفارشی برای یک پروژه تعریف میشوند، مشخص کنید که در هنگام باز شدن پیوند توسط یک برنامه تلفن همراه مشخص، از کدام یک استفاده کنید. در غیر این صورت دامنه پیش فرض به طور خودکار انتخاب می شود (به عنوان مثال،PROJECT_ID .firebaseapp.com
). dynamicLinkDomain
: منسوخ شده است. این پارامتر را مشخص نکنید.
let actionCodeSettings = ActionCodeSettings() actionCodeSettings.url = URL(string: "https://www.example.com") // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = true actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) actionCodeSettings.setAndroidPackageName("com.example.android", installIfNotAvailable: false, minimumVersion: "12")
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; [actionCodeSettings setURL:[NSURL URLWithString:@"https://www.example.com"]]; // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = YES; [actionCodeSettings setIOSBundleID:[[NSBundle mainBundle] bundleIdentifier]]; [actionCodeSettings setAndroidPackageName:@"com.example.android" installIfNotAvailable:NO minimumVersion:@"12"];
برای کسب اطلاعات بیشتر درباره ActionCodeSettings
، به بخش Passing State in Email Actions مراجعه کنید.-
از کاربر ایمیل خود را بخواهید. پیوند احراز هویت را به ایمیل کاربر ارسال کنید و ایمیل کاربر را در صورتی که کاربر ورود به ایمیل را در همان دستگاه کامل کند، ذخیره کنید. Auth.auth().sendSignInLink(toEmail: email, actionCodeSettings: actionCodeSettings) { error in // ... if let error = error { self.showMessagePrompt(error.localizedDescription) return } // The link was successfully sent. Inform the user. // Save the email locally so you don't need to ask the user for it again // if they open the link on the same device. UserDefaults.standard.set(email, forKey: "Email") self.showMessagePrompt("Check your email for link") // ... }
[[FIRAuth auth] sendSignInLinkToEmail:email actionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { // ... if (error) { [self showMessagePrompt:error.localizedDescription]; return; } // The link was successfully sent. Inform the user. // Save the email locally so you don't need to ask the user for it again // if they open the link on the same device. [NSUserDefaults.standardUserDefaults setObject:email forKey:@"Email"]; [self showMessagePrompt:@"Check your email for link"]; // ... }];
با پیوند ایمیل وارد سیستم شوید
نگرانی های امنیتی
تکمیل ورود به سیستم در یک برنامه تلفن همراه اپل
Firebase Hosting پیکربندی کنید
پیکربندی دامنه های Firebase Hosting : در کنسول Firebase ، بخش Hosting را باز کنید. اگر می خواهید از دامنه پیش فرض برای پیوند ایمیلی که در برنامه های تلفن همراه باز می شود استفاده کنید، به سایت پیش فرض خود بروید و دامنه Hosting پیش فرض خود را یادداشت کنید. یک دامنه Hosting پیش فرض معمولاً به شکل زیر است: PROJECT_ID .firebaseapp.com
.هنگامی که برنامه خود را برای رهگیری پیوند ورودی پیکربندی می کنید، به این مقدار نیاز خواهید داشت. اگر میخواهید از یک دامنه سفارشی برای پیوند ایمیل استفاده کنید، میتوانید آن را با Firebase Hosting ثبت کنید و از آن برای دامنه پیوند استفاده کنید.
پیکربندی برنامه های اپل: شما باید دامنه انتخابی را به عنوان یک دامنه مرتبط برای پیوندهای برنامه پیکربندی کنید. برای تنظیم حق در برنامه خود، برگه Signing & Capabilities هدف را در Xcode باز کنید و دامنه های میزبانی Firebase را از مرحله قبل به قابلیت Associated Domains اضافه کنید. اگر از دامنه Firebase Hosting پیش فرض استفاده کنید، این خواهد بود applinks: PROJECT_ID .firebaseapp.com
.برای اطلاعات بیشتر به پشتیبانی از دامنه های مرتبط در سایت اسناد اپل مراجعه کنید.
پیوند را تأیید کنید و وارد شوید
if Auth.auth().isSignIn(withEmailLink: link) { Auth.auth().signIn(withEmail: email, link: self.link) { user, error in // ... } }
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
پیوند دادن / احراز هویت مجدد با پیوند ایمیل
let credential = EmailAuthCredential.credential(withEmail:email link:link) Auth.auth().currentUser?.link(with: credential) { authData, error in if (error) { // And error occurred during linking. return } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }
FIRAuthCredential *credential = [FIREmailAuthProvider credentialWithEmail:email link:link]; [FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during linking. return; } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }];
let credential = EmailAuthProvider.credential(withEmail:email link:link) Auth.auth().currentUser?.reauthenticate(with: credential) { authData, error in if (error) { // And error occurred during re-authentication. return } // The user was successfully re-authenticated. }
FIRAuthCredential *credential = [FIREmailAuthCredential credentialWithEmail:email link:link]; [FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during re-authentication return; } // The user was successfully re-authenticated. }];
منسوخ شده: تأیید مبتنی بر Firebase Dynamic Links
منسوخ شده: متمایز کردن رمز عبور ایمیل از پیوند ایمیل
fetchSignInMethodsForEmail()
را غیرفعال میکند، که قبلاً برای پیادهسازی جریانهای شناسه اول توصیه میکردیم.
مراحل بعدی
در برنامه های خود، می توانید اطلاعات اولیه نمایه کاربر را از شی User
دریافت کنید. به مدیریت کاربران مراجعه کنید.در قوانین امنیتی Firebase Realtime Database و Cloud Storage خود، میتوانید شناسه کاربری منحصر به فرد کاربر واردشده به سیستم را از متغیر 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; }