میتوانید از 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")
هدف-C
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") // ... }
هدف-C
[[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 Auth نیاز دارد که آدرس ایمیل کاربر هنگام تکمیل جریان ورود به سیستم ارائه شود. برای موفقیت در ورود به سیستم، این آدرس ایمیل باید با آدرسی که پیوند ورود به سیستم در ابتدا به آن ارسال شده است مطابقت داشته باشد.
میتوانید این جریان را برای کاربرانی که پیوند ورود به سیستم را در همان دستگاهی که پیوند را درخواست میکنند باز میکنند، با ذخیره آدرس ایمیل آنها به صورت محلی هنگام ارسال ایمیل ورود به سیستم، ساده کنید. سپس، از این آدرس برای تکمیل جریان استفاده کنید.
پس از تکمیل ورود به سیستم، هر مکانیسم تایید نشده قبلی ورود به سیستم از کاربر حذف خواهد شد و هر جلسه موجود باطل خواهد شد. به عنوان مثال، اگر شخصی قبلاً یک حساب تأیید نشده با همان ایمیل و رمز عبور ایجاد کرده باشد، گذرواژه کاربر حذف میشود تا از ورود مجدد فردی که ادعای مالکیت و ایجاد آن حساب تأیید نشده با همان حساب را داشته است جلوگیری شود.
تکمیل ورود به سیستم در یک برنامه تلفن همراه اپل
Firebase Authentication از Firebase Hosting برای ارسال پیوند ایمیل به دستگاه تلفن همراه استفاده می کند. برای تکمیل ورود به سیستم با یک برنامه تلفن همراه، برنامه باید طوری پیکربندی شود که پیوند برنامه ورودی را شناسایی کند، پیوند عمیق زیرین را تجزیه کند و سپس ورود به سیستم را کامل کند. برای جزئیات بیشتر در مورد نحوه انجام این کار ، پیوندهای جهانی و دامنه های مرتبط در iOS را بررسی کنید.
Firebase Hosting پیکربندی کنید
Firebase Authentication هنگام ایجاد و ارسال پیوندی که قرار است در یک برنامه تلفن همراه باز شود، از دامنه های Firebase Hosting استفاده می کند. یک دامنه 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 // ... } }
هدف-C
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
برای آشنایی با نحوه مدیریت ورود به سیستم با پیوند ایمیل در یک برنامه Android، به راهنمای Android مراجعه کنید.
برای آشنایی با نحوه مدیریت ورود به سیستم با پیوند ایمیل در یک برنامه وب، به راهنمای وب مراجعه کنید.
پیوند دادن / احراز هویت مجدد با پیوند ایمیل
همچنین می توانید این روش احراز هویت را به یک کاربر موجود پیوند دهید. برای مثال، کاربری که قبلاً با ارائهدهنده دیگری مانند شماره تلفن احراز هویت شده است، میتواند این روش ورود به سیستم را به حساب موجود خود اضافه کند.
تفاوت در نیمه دوم عملیات خواهد بود:
سویفت
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. }
هدف-C
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. }
هدف-C
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. }];
با این حال، از آنجایی که جریان ممکن است به دستگاه دیگری ختم شود که کاربر اصلی در آن وارد نشده است، این جریان ممکن است تکمیل نشود. در این صورت می توان خطایی به کاربر نشان داد تا مجبور شود لینک را در همان دستگاه باز کند. برخی از حالت ها را می توان در پیوند ارسال کرد تا اطلاعاتی در مورد نوع عملیات و uid کاربر ارائه شود.
منسوخ شده: تأیید مبتنی بر Firebase Dynamic Links
قبل از Firebase Authentication iOS SDK v11.8.0، ویژگی ورود پیوند ایمیل به Firebase Dynamic Links برای باز کردن پیوندهای ورود به سیستم در برنامه صحیح متکی بود. این پیوندهای تأیید منسوخ شدهاند، زیرا Firebase Dynamic Links در 25 آگوست 2025 بسته میشود.
اگر برنامه شما از پیوندهای سبک قدیمی استفاده می کند، باید برنامه خود را به سیستم جدید مبتنی بر Firebase Hosting منتقل کنید.
منسوخ شده: متمایز کردن رمز عبور ایمیل از پیوند ایمیل
اگر پروژه خود را در تاریخ 15 سپتامبر 2023 یا پس از آن ایجاد کرده اید، حفاظت از شمارش ایمیل به طور پیش فرض فعال است. این ویژگی امنیت حسابهای کاربری پروژه شما را بهبود میبخشد، اما متد fetchSignInMethodsForEmail()
را غیرفعال میکند، که قبلاً برای پیادهسازی جریانهای شناسه اول توصیه میکردیم.
اگرچه می توانید حفاظت از شمارش ایمیل را برای پروژه خود غیرفعال کنید، توصیه می کنیم این کار را نکنید.
برای کسب اطلاعات بیشتر، به فعال یا غیرفعال کردن حفاظت از شمارش ایمیل مراجعه کنید.
مراحل بعدی
پس از اینکه کاربر برای اولین بار وارد سیستم شد، یک حساب کاربری جدید ایجاد میشود و به اعتبارنامهها (یعنی نام کاربری و رمز عبور، شماره تلفن یا اطلاعات ارائهدهنده تاییدیه) مرتبط میشود که کاربر با آن وارد شده است. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در همه برنامههای پروژه شما، صرف نظر از نحوه ورود کاربر به سیستم استفاده کرد.
در برنامه های خود، می توانید اطلاعات اولیه نمایه کاربر را از شی
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) }
هدف-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین ممکن است بخواهید کد رسیدگی به خطا را برای طیف کامل خطاهای احراز هویت اضافه کنید. به رسیدگی به خطاها مراجعه کنید.
،میتوانید از 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")
هدف-C
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") // ... }
هدف-C
[[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 Auth نیاز دارد که آدرس ایمیل کاربر هنگام تکمیل جریان ورود به سیستم ارائه شود. برای موفقیت در ورود به سیستم، این آدرس ایمیل باید با آدرسی که پیوند ورود به سیستم در ابتدا به آن ارسال شده است مطابقت داشته باشد.
میتوانید این جریان را برای کاربرانی که پیوند ورود به سیستم را در همان دستگاهی که پیوند را درخواست میکنند باز میکنند، با ذخیره آدرس ایمیل آنها به صورت محلی هنگام ارسال ایمیل ورود به سیستم، ساده کنید. سپس، از این آدرس برای تکمیل جریان استفاده کنید.
پس از تکمیل ورود به سیستم، هر مکانیسم تایید نشده قبلی ورود به سیستم از کاربر حذف خواهد شد و هر جلسه موجود باطل خواهد شد. به عنوان مثال، اگر شخصی قبلاً یک حساب تأیید نشده با همان ایمیل و رمز عبور ایجاد کرده باشد، گذرواژه کاربر حذف میشود تا از ورود مجدد فردی که ادعای مالکیت و ایجاد آن حساب تأیید نشده با همان حساب را داشته است جلوگیری شود.
تکمیل ورود به سیستم در یک برنامه تلفن همراه اپل
Firebase Authentication از Firebase Hosting برای ارسال پیوند ایمیل به دستگاه تلفن همراه استفاده می کند. برای تکمیل ورود به سیستم با یک برنامه تلفن همراه، برنامه باید طوری پیکربندی شود که پیوند برنامه ورودی را شناسایی کند، پیوند عمیق زیرین را تجزیه کند و سپس ورود به سیستم را کامل کند. برای جزئیات بیشتر در مورد نحوه انجام این کار ، پیوندهای جهانی و دامنه های مرتبط در iOS را بررسی کنید.
Firebase Hosting پیکربندی کنید
Firebase Authentication هنگام ایجاد و ارسال پیوندی که قرار است در یک برنامه تلفن همراه باز شود، از دامنه های Firebase Hosting استفاده می کند. یک دامنه 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 // ... } }
هدف-C
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
برای آشنایی با نحوه مدیریت ورود به سیستم با پیوند ایمیل در یک برنامه Android، به راهنمای Android مراجعه کنید.
برای آشنایی با نحوه مدیریت ورود به سیستم با پیوند ایمیل در یک برنامه وب، به راهنمای وب مراجعه کنید.
پیوند دادن / احراز هویت مجدد با پیوند ایمیل
همچنین می توانید این روش احراز هویت را به یک کاربر موجود پیوند دهید. برای مثال، کاربری که قبلاً با ارائهدهنده دیگری مانند شماره تلفن احراز هویت شده است، میتواند این روش ورود به سیستم را به حساب موجود خود اضافه کند.
تفاوت در نیمه دوم عملیات خواهد بود:
سویفت
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. }
هدف-C
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. }
هدف-C
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. }];
با این حال، از آنجایی که جریان ممکن است به دستگاه دیگری ختم شود که کاربر اصلی در آن وارد نشده است، این جریان ممکن است تکمیل نشود. در این صورت می توان خطایی به کاربر نشان داد تا مجبور شود لینک را در همان دستگاه باز کند. برخی از حالت ها را می توان در پیوند ارسال کرد تا اطلاعاتی در مورد نوع عملیات و uid کاربر ارائه شود.
منسوخ شده: تأیید مبتنی بر Firebase Dynamic Links
قبل از Firebase Authentication iOS SDK v11.8.0، ویژگی ورود پیوند ایمیل به Firebase Dynamic Links برای باز کردن پیوندهای ورود به سیستم در برنامه صحیح متکی بود. این پیوندهای تأیید منسوخ شدهاند، زیرا Firebase Dynamic Links در 25 آگوست 2025 بسته میشود.
اگر برنامه شما از پیوندهای سبک قدیمی استفاده می کند، باید برنامه خود را به سیستم جدید مبتنی بر Firebase Hosting منتقل کنید.
منسوخ شده: متمایز کردن رمز عبور ایمیل از پیوند ایمیل
اگر پروژه خود را در تاریخ 15 سپتامبر 2023 یا پس از آن ایجاد کرده اید، حفاظت از شمارش ایمیل به طور پیش فرض فعال است. این ویژگی امنیت حسابهای کاربری پروژه شما را بهبود میبخشد، اما متد fetchSignInMethodsForEmail()
را غیرفعال میکند، که قبلاً برای پیادهسازی جریانهای شناسه اول توصیه میکردیم.
اگرچه می توانید حفاظت از شمارش ایمیل را برای پروژه خود غیرفعال کنید، توصیه می کنیم این کار را نکنید.
برای کسب اطلاعات بیشتر، به فعال یا غیرفعال کردن حفاظت از شمارش ایمیل مراجعه کنید.
مراحل بعدی
پس از اینکه کاربر برای اولین بار وارد سیستم شد، یک حساب کاربری جدید ایجاد میشود و به اعتبارنامهها (یعنی نام کاربری و رمز عبور، شماره تلفن یا اطلاعات ارائهدهنده تاییدیه) مرتبط میشود که کاربر با آن وارد شده است. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در همه برنامههای پروژه شما، صرف نظر از نحوه ورود کاربر به سیستم استفاده کرد.
در برنامه های خود، می توانید اطلاعات اولیه نمایه کاربر را از شی
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) }
هدف-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین ممکن است بخواهید کد رسیدگی به خطا را برای طیف کامل خطاهای احراز هویت اضافه کنید. به رسیدگی به خطاها مراجعه کنید.
،میتوانید از 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")
هدف-C
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") // ... }
هدف-C
[[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 Auth نیاز دارد که آدرس ایمیل کاربر هنگام تکمیل جریان ورود به سیستم ارائه شود. برای موفقیت در ورود به سیستم، این آدرس ایمیل باید با آدرسی که پیوند ورود به سیستم در ابتدا به آن ارسال شده است مطابقت داشته باشد.
میتوانید این جریان را برای کاربرانی که پیوند ورود به سیستم را در همان دستگاهی که پیوند را درخواست میکنند باز میکنند، با ذخیره آدرس ایمیل آنها به صورت محلی هنگام ارسال ایمیل ورود به سیستم، ساده کنید. سپس، از این آدرس برای تکمیل جریان استفاده کنید.
پس از تکمیل ورود به سیستم، هر مکانیسم تایید نشده قبلی ورود به سیستم از کاربر حذف خواهد شد و هر جلسه موجود باطل خواهد شد. به عنوان مثال، اگر شخصی قبلاً یک حساب تأیید نشده با همان ایمیل و رمز عبور ایجاد کرده باشد، گذرواژه کاربر حذف میشود تا از ورود مجدد فردی که ادعای مالکیت و ایجاد آن حساب تأیید نشده با همان حساب را داشته است جلوگیری شود.
تکمیل ورود به سیستم در یک برنامه تلفن همراه اپل
Firebase Authentication از Firebase Hosting برای ارسال پیوند ایمیل به دستگاه تلفن همراه استفاده می کند. برای تکمیل ورود به سیستم با یک برنامه تلفن همراه، برنامه باید طوری پیکربندی شود که پیوند برنامه ورودی را شناسایی کند، پیوند عمیق زیرین را تجزیه کند و سپس ورود به سیستم را کامل کند. برای جزئیات بیشتر در مورد نحوه انجام این کار ، پیوندهای جهانی و دامنه های مرتبط در iOS را بررسی کنید.
Firebase Hosting پیکربندی کنید
Firebase Authentication هنگام ایجاد و ارسال پیوندی که قرار است در یک برنامه تلفن همراه باز شود، از دامنه های Firebase Hosting استفاده می کند. یک دامنه 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 // ... } }
هدف-C
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
برای آشنایی با نحوه مدیریت ورود به سیستم با پیوند ایمیل در یک برنامه Android، به راهنمای Android مراجعه کنید.
برای آشنایی با نحوه مدیریت ورود به سیستم با پیوند ایمیل در یک برنامه وب، به راهنمای وب مراجعه کنید.
پیوند دادن / احراز هویت مجدد با پیوند ایمیل
همچنین می توانید این روش احراز هویت را به یک کاربر موجود پیوند دهید. برای مثال، کاربری که قبلاً با ارائهدهنده دیگری مانند شماره تلفن احراز هویت شده است، میتواند این روش ورود به سیستم را به حساب موجود خود اضافه کند.
تفاوت در نیمه دوم عملیات خواهد بود:
سویفت
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. }
هدف-C
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. }
هدف-C
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. }];
با این حال، از آنجایی که جریان ممکن است به دستگاه دیگری ختم شود که کاربر اصلی در آن وارد نشده است، این جریان ممکن است تکمیل نشود. در این صورت می توان خطایی به کاربر نشان داد تا مجبور شود لینک را در همان دستگاه باز کند. برخی از حالت ها را می توان در پیوند ارسال کرد تا اطلاعاتی در مورد نوع عملیات و uid کاربر ارائه شود.
منسوخ شده: تأیید مبتنی بر Firebase Dynamic Links
قبل از Firebase Authentication iOS SDK v11.8.0، ویژگی ورود پیوند ایمیل به Firebase Dynamic Links برای باز کردن پیوندهای ورود به سیستم در برنامه صحیح متکی بود. این پیوندهای تأیید منسوخ شدهاند، زیرا Firebase Dynamic Links در 25 آگوست 2025 بسته میشود.
اگر برنامه شما از پیوندهای سبک قدیمی استفاده می کند، باید برنامه خود را به سیستم جدید مبتنی بر Firebase Hosting منتقل کنید.
منسوخ شده: متمایز کردن رمز عبور ایمیل از پیوند ایمیل
اگر پروژه خود را در تاریخ 15 سپتامبر 2023 یا پس از آن ایجاد کرده اید، حفاظت از شمارش ایمیل به طور پیش فرض فعال است. این ویژگی امنیت حسابهای کاربری پروژه شما را بهبود میبخشد، اما متد fetchSignInMethodsForEmail()
را غیرفعال میکند، که قبلاً برای پیادهسازی جریانهای شناسه اول توصیه میکردیم.
اگرچه می توانید حفاظت از شمارش ایمیل را برای پروژه خود غیرفعال کنید، توصیه می کنیم این کار را نکنید.
برای کسب اطلاعات بیشتر، به فعال یا غیرفعال کردن حفاظت از شمارش ایمیل مراجعه کنید.
مراحل بعدی
پس از اینکه کاربر برای اولین بار وارد سیستم شد، یک حساب کاربری جدید ایجاد میشود و به اعتبارنامهها (یعنی نام کاربری و رمز عبور، شماره تلفن یا اطلاعات ارائهدهنده تاییدیه) مرتبط میشود که کاربر با آن وارد شده است. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در همه برنامههای پروژه شما، صرف نظر از نحوه ورود کاربر به سیستم استفاده کرد.
در برنامه های خود، می توانید اطلاعات اولیه نمایه کاربر را از شی
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) }
هدف-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین ممکن است بخواهید برای طیف گسترده ای از خطاهای تأیید اعتبار ، کد حمل خطا را اضافه کنید. خطاهای دسته را ببینید.
،شما می توانید با ارسال ایمیلی حاوی پیوندی که می توانند برای ورود به سیستم کلیک کنند ، از تأیید هویت Firebase استفاده کنید.
مزایای بی شماری برای ورود به سیستم از طریق ایمیل وجود دارد:
- ثبت نام اصطکاک کم و ورود به سیستم.
- خطر کمتری از استفاده مجدد از رمز عبور در برنامه ها ، که می تواند امنیت رمزهای عبور حتی به خوبی را تضعیف کند.
- امکان تأیید اعتبار کاربر در عین حال تأیید اینکه کاربر مالک مشروع یک آدرس ایمیل است.
- یک کاربر فقط برای ورود به سیستم به یک حساب ایمیل در دسترس نیاز دارد. هیچ مالکیت شماره تلفن یا حساب رسانه های اجتماعی لازم نیست.
- یک کاربر می تواند بدون نیاز به ارائه (یا به یاد آوردن) رمز عبور ، که می تواند در دستگاه تلفن همراه دست و پا گیر باشد ، ایمن وارد سیستم شود.
- یک کاربر موجود که قبلاً با یک شناسه ایمیل (رمز عبور یا فدرال) وارد سیستم شده بود ، می تواند فقط با ایمیل وارد سیستم شود. به عنوان مثال ، کاربری که رمز ورود خود را فراموش کرده است ، هنوز هم می تواند بدون نیاز به تنظیم مجدد رمز عبور خود وارد سیستم شود.
قبل از شروع
برای نصب و مدیریت وابستگی های Firebase از مدیر بسته Swift استفاده کنید.
- در Xcode ، با باز کردن پروژه برنامه خود ، به پرونده> اضافه کردن بسته ها بروید.
- هنگامی که از شما خواسته شد ، مخزن SDK سیستم عامل Apple Firebase را اضافه کنید:
- کتابخانه Firebase Authentication را انتخاب کنید.
- پرچم
-ObjC
را به بخش دیگر Flags Flags از تنظیمات ساخت هدف خود اضافه کنید. - پس از اتمام ، Xcode به طور خودکار شروع به حل و فصل وابستگی های شما در پس زمینه می کند.
https://github.com/firebase/firebase-ios-sdk.git
ورود به سیستم لینک ایمیل را برای پروژه Firebase خود فعال کنید
برای ورود به سیستم کاربران از طریق لینک ایمیل ، ابتدا باید ارائه دهنده ایمیل و روش ورود به سیستم لینک ایمیل را برای پروژه Firebase خود فعال کنید:
- در کنسول Firebase ، بخش Auth را باز کنید.
- در برگه Sign In Method ، ارائه دهنده ایمیل/رمز عبور را فعال کنید. توجه داشته باشید که ورود به سیستم ایمیل/رمز عبور باید برای استفاده از ورود به سیستم لینک ایمیل فعال شود.
- در همان بخش ، روش ورود به سیستم لینک ایمیل (ورود به سیستم بدون رمز عبور) را فعال کنید.
- روی ذخیره کلیک کنید.
یک پیوند احراز هویت به آدرس ایمیل کاربر ارسال کنید
برای شروع جریان احراز هویت ، رابط کاربری را به کاربر ارائه دهید که کاربر را مجبور به ارائه آدرس ایمیل خود کند و سپس با sendSignInLink
تماس بگیرید تا درخواست کند که Firebase پیوند تأیید اعتبار را به ایمیل کاربر ارسال کند.
Object
ActionCodeSettings
را بسازید ، که دستورالعمل هایی در مورد نحوه ساخت لینک ایمیل را در اختیار شما قرار می دهد. زمینه های زیر را تنظیم کنید:-
url
: پیوند عمیق به جاسازی شده و هر حالت اضافی که باید در آن تصویب شود. دامنه لینک باید در لیست کنسول Firebase از دامنه های مجاز قرار بگیرد ، که می توان با مراجعه به برگه روش ورود به سیستم (تأیید اعتبار-> روش ورود به سیستم) یافت.
-
iOSBundleID
وandroidPackageName
: به Firebase Authentication کمک می کند تا تعیین کند که آیا باید یک پیوند وب یا موبایل ایجاد کند که بر روی دستگاه Android یا Apple باز شود. -
handleCodeInApp
: تنظیم کنید. عملیات ورود به سیستم بر خلاف سایر اقدامات ایمیل خارج (تنظیم مجدد رمز عبور و تأیید ایمیل) همیشه باید در برنامه انجام شود. این امر به این دلیل است که ، در پایان جریان ، انتظار می رود کاربر وارد سیستم شود و وضعیت 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")
هدف-C
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
، به بخش عبور در بخش اقدامات ایمیل مراجعه کنید.-
ایمیل خود را از کاربر بخواهید.
پیوند احراز هویت را به ایمیل کاربر ارسال کنید و در صورت تکمیل سیستم ورود به سیستم ایمیل در همان دستگاه ، ایمیل کاربر را ذخیره کنید.
سویفت
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") // ... }
هدف-C
[[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"]; // ... }];
با پیوند ایمیل وارد شوید
نگرانی های امنیتی
برای جلوگیری از ورود به سیستم ورود به سیستم به عنوان کاربر ناخواسته یا در دستگاه ناخواسته ، Auth Firebase نیاز دارد که هنگام تکمیل جریان ورود به سیستم ، آدرس ایمیل کاربر را ارائه دهد. برای موفقیت در ورود به سیستم ، این آدرس ایمیل باید با آدرس که در ابتدا لینک ورود به سیستم ارسال شده است مطابقت داشته باشد.
شما می توانید با ذخیره آدرس ایمیل خود به صورت محلی هنگام ارسال ایمیل ورود به سیستم ، این جریان را برای کاربرانی که پیوند ورود به سیستم را در همان دستگاه مورد درخواست لینک باز می کنند ، ساده کنید. سپس از این آدرس برای تکمیل جریان استفاده کنید.
پس از اتمام ورود به سیستم ، هر مکانیسم تأیید نشده قبلی از ورود به سیستم حذف می شود و هر جلسه موجود بی اعتبار می شود. به عنوان مثال ، اگر شخصی قبلاً یک حساب کاربری تأیید نشده با همان ایمیل و رمز عبور ایجاد کرده بود ، رمز عبور کاربر حذف می شود تا از شخصی که ادعای مالکیت کرده است جلوگیری کند و آن حساب غیرقابل تصویب را از ورود دوباره با همان حساب ایجاد کرده است.
تکمیل ورود به سیستم در یک برنامه موبایل Apple
Firebase Authentication از Firebase Hosting برای ارسال لینک ایمیل به دستگاه تلفن همراه استفاده می کند. برای تکمیل ورود به سیستم با یک برنامه تلفن همراه ، برنامه برای تشخیص پیوند برنامه ورودی ، پیکربندی شده است ، پیوند عمیق را تجزیه کرده و سپس ورود به سیستم را تکمیل کنید. برای اطلاعات بیشتر در مورد چگونگی دستیابی به این امر ، پیوندهای جهانی و دامنه های مرتبط را در iOS بررسی کنید.
Firebase Hosting پیکربندی کنید
Firebase Authentication هنگام ایجاد و ارسال پیوندی که قرار است در یک برنامه موبایل باز شود ، از دامنه های Firebase Hosting استفاده می کند. دامنه Firebase Hosting قبلاً برای شما پیکربندی شده است.
دامنه های Firebase Hosting پیکربندی کنید:
در کنسول Firebase ، بخش میزبانی را باز کنید.
اگر می خواهید از دامنه پیش فرض برای لینک ایمیل که در برنامه های تلفن همراه باز می شود استفاده کنید ، به سایت پیش فرض خود بروید و به دامنه Hosting پیش فرض خود توجه کنید. یک دامنه Hosting پیش فرض به طور معمول به این شکل است:
PROJECT_ID .firebaseapp.com
.هنگام پیکربندی برنامه خود برای رهگیری لینک ورودی ، به این مقدار نیاز دارید.
اگر می خواهید از یک دامنه سفارشی برای لینک ایمیل استفاده کنید ، می توانید یکی را در Firebase Hosting ثبت کنید و از آن برای دامنه پیوند استفاده کنید.
پیکربندی برنامه های اپل:
شما نیاز به پیکربندی دامنه انتخاب شده به عنوان یک دامنه مرتبط برای لینک های برنامه دارید. برای تنظیم حق در برنامه خود ، برگه امضای و قابلیت های هدف را در Xcode باز کنید و دامنه های میزبانی Firebase را از مرحله قبلی به قابلیت دامنه های مرتبط اضافه کنید. در صورت استفاده از دامنه Firebase Hosting ، این خواهد بود
applinks: PROJECT_ID .firebaseapp.com
.برای اطلاعات بیشتر به حوزه های پشتیبانی در سایت مستندات اپل مراجعه کنید.
پیوند و ورود به سیستم را تأیید کنید
پس از دریافت لینک همانطور که در بالا توضیح داده شد ، تأیید کنید که منظور از تأیید اعتبار لینک ایمیل و ورود به سیستم است.
سویفت
if Auth.auth().isSignIn(withEmailLink: link) { Auth.auth().signIn(withEmail: email, link: self.link) { user, error in // ... } }
هدف-C
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
برای کسب اطلاعات در مورد نحوه انجام ورود به سیستم با لینک ایمیل در یک برنامه Android ، به راهنمای Android مراجعه کنید.
برای کسب اطلاعات در مورد نحوه رسیدگی به ورود به سیستم با ایمیل در یک برنامه وب ، به راهنمای وب مراجعه کنید.
پیوند/تأیید مجدد با لینک ایمیل
همچنین می توانید این روش احراز هویت را به کاربر موجود پیوند دهید. به عنوان مثال ، کاربر قبلاً با ارائه دهنده دیگر ، مانند شماره تلفن ، می تواند این روش ورود را به حساب موجود خود اضافه کند.
تفاوت در نیمه دوم عمل است:
سویفت
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. }
هدف-C
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. }
هدف-C
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. }];
با این حال ، از آنجا که جریان می تواند به دستگاه دیگری پایان یابد که کاربر اصلی وارد آن نشده باشد ، این جریان ممکن است تکمیل نشود. در این حالت ، خطایی به کاربر نشان داده می شود تا آنها را مجبور به باز کردن پیوند در همان دستگاه کند. برخی از ایالت ها را می توان در لینک منتقل کرد تا اطلاعاتی در مورد نوع عملکرد و UID کاربر ارائه دهد.
مستهلک: تأیید Firebase Dynamic Links
قبل از Firebase Authentication iOS SDK v11.8.0 ، علامت لینک ایمیل در ویژگی متکی به Firebase Dynamic Links برای باز کردن ورود به لینک ها در برنامه صحیح است. این پیوندهای تأیید کاهش می یابد ، زیرا Firebase Dynamic Links در 25 اوت 2025 خاموش می شوند.
اگر برنامه شما از لینک های سبک قدیمی استفاده می کند ، باید برنامه خود را به سیستم مبتنی بر Firebase Hosting جدید منتقل کنید.
مستهلک: تمایز کلمه ایمیل از لینک ایمیل
اگر پروژه خود را در تاریخ 15 سپتامبر 2023 یا پس از آن ایجاد کرده اید، حفاظت از شمارش ایمیل به طور پیش فرض فعال است. این ویژگی امنیت حساب های کاربری پروژه شما را بهبود می بخشد ، اما روش fetchSignInMethodsForEmail()
را غیرفعال می کند ، که قبلاً ما برای اجرای جریان شناسه اول توصیه می کردیم.
اگرچه می توانید محافظت از شمارش ایمیل را برای پروژه خود غیرفعال کنید ، ما توصیه می کنیم در مورد انجام این کار.
برای کسب اطلاعات بیشتر ، به Enable یا غیرفعال کردن حفاظت از شمارش ایمیل مراجعه کنید.
مراحل بعدی
پس از ورود کاربر برای اولین بار ، یک حساب کاربری جدید ایجاد می شود و به اعتبارنامه ها پیوند می یابد - یعنی نام کاربر و رمز عبور ، شماره تلفن یا اطلاعات ارائه دهنده AUTH - کاربر امضا شده با آن. این حساب جدید به عنوان بخشی از پروژه Firebase شما ذخیره می شود و می تواند برای شناسایی کاربر در هر برنامه در پروژه شما ، صرف نظر از نحوه ورود کاربر ، استفاده شود.
در برنامه های خود می توانید اطلاعات اصلی نمایه کاربر را از شی
User
دریافت کنید. به مدیریت کاربران مراجعه کنید.در Firebase Realtime Database و قوانین امنیتی Cloud Storage ، می توانید شناسه کاربر منحصر به فرد کاربر امضا شده را از متغیر
auth
دریافت کرده و از آن برای کنترل آنچه کاربر می تواند به آن دسترسی پیدا کند ، استفاده کنید.
شما می توانید با پیوند دادن اعتبارنامه ارائه دهنده AUTH به یک حساب کاربری موجود ، به کاربران اجازه دهید با استفاده از چندین ارائه دهنده احراز هویت وارد برنامه خود شوند.
برای ثبت نام کاربر ، با signOut:
.
سویفت
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
هدف-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین ممکن است بخواهید برای طیف گسترده ای از خطاهای تأیید اعتبار ، کد حمل خطا را اضافه کنید. خطاهای دسته را ببینید.