میتوانید به کاربران اجازه دهید با پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود، بااستفاده از چندین ارائهدهنده اصالتسنجی به سیستم برنامهتان وارد شوند. کاربران صرفنظر از ارائهدهنده اصالتسنجی که برای ورود به سیستم استفاده کردهاند، با همان شناسه کاربر Firebase قابلشناسایی هستند. برای مثال، کاربری که با گذرواژه به سیستم وارد شده است میتواند «حساب Google» را پیوند دهد و در آینده با هریک از این روشها به سیستم وارد شود. یا، کاربر ناشناسی میتواند حساب Facebook را پیوند دهد و سپس، بعداً با Facebook به سیستم وارد شود تا به استفاده از برنامه شما ادامه دهد.
قبل از شروع
پشتیبانی از دو یا چند ارائهدهنده اصالتسنجی (احتمالاً شامل اصالتسنجی ناشناس) را به برنامهتان اضافه کنید.
کلاسFirebaseAuth دروازه همه فراخوانیهای API است.
ازطریق FirebaseAuth.DefaultInstance قابلدسترسی است.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربر
برای پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود:
- کاربر را بااستفاده از هر روش یا ارائهدهنده اصالتسنجی به سیستم وارد کنید.
- جریان ورود به سیستم را برای ارائهدهنده اصالتسنجی جدید تا مرحله فراخوانی یکی از روشهای
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsyncتکمیل کنید، اما این مرحله را شامل نشود. برای مثال، گذرکلید Google کاربر، گذرکلید دسترسی Facebook، یا ایمیل و گذرواژه را دریافت کنید.
ورود به سیستم GoogleFirebase.Auth.Credentialرا برای ارائهدهنده اصالتسنجی جدید دریافت کنید: ورود به سیستم FacebookFirebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
ورود به سیستم با ایمیل و گذرواژهFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
Firebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
شیء
Firebase.Auth.Credentialرا به روشLinkWithCredentialAsyncکاربر واردشده به سیستم ارسال کنید:auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("LinkWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})", result.User.DisplayName, result.User.UserId); });
اگر اطلاعات اعتباری ازقبل به حساب کاربری دیگری پیوند داده شده باشد، تماس با
LinkWithCredentialAsyncناموفق خواهد بود. در این وضعیت، باید ادغام حسابها و دادههای منسوب را بهنحوی که برای برنامهتان مناسب است انجام دهید:// Gather data for the currently signed in User. string currentUserId = auth.CurrentUser.UserId; string currentEmail = auth.CurrentUser.Email; string currentDisplayName = auth.CurrentUser.DisplayName; System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl; // Sign in with the new credentials. auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); // TODO: Merge app specific details using the newUser and values from the // previous user, saved above. });
اگر تماس با LinkWithCredentialAsync موفقیتآمیز باشد، کاربر اکنون میتواند بااستفاده از
هریک از ارائهدهندگان اصالتسنجی پیوندشده به سیستم وارد شود و به همان دادههای Firebase دسترسی پیدا کند.
لغو پیوند ارائهدهنده اصالتسنجی از حساب کاربر
یک حساب کاربری Firebase میتواند چندین ارائهدهنده اصالتسنجی پیوندشده داشته باشد (برای مثال، ایمیل/گذرواژه، Google، Facebook)، که به کاربر امکان میدهد ازطریق روشهای مختلف به همان حساب Firebase وارد شود.
اگر ارائهدهنده اصالتسنجی را از حساب کاربری لغو پیوند کنید، کاربر دیگر نمیتواند با آن ارائهدهنده به سیستم وارد شود.
برای لغو پیوند ارائهدهنده اصالتسنجی از حساب کاربر، شناسه ارائهدهنده را به
متد UnlinkAsync ارسال کنید. با فراخوانی
ProviderData میتوانید شناسههای ارائهدهنده
ارائهدهندگان اصالتسنجی پیوندشده به کاربر را دریافت کنید.
// Unlink the sign-in provider from the currently active user. // providerIdString is a string identifying a provider, // retrieved via FirebaseAuth.FetchProvidersForEmail(). auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("UnlinkAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("UnlinkAsync encountered an error: " + task.Exception); return; } // The user has been unlinked from the provider. Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})", result.User.DisplayName, result.User.UserId); });
عیبیابی
اگر هنگام تلاش برای پیوند دادن چند حساب با خطا مواجه شدید، مستندات مربوط به نشانیهای ایمیل تأییدشده را ببینید.