Kimlik doğrulama sağlayıcısı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak, kullanıcıların birden çok kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz. Kullanıcılar, oturum açmak için kullandıkları kimlik doğrulama sağlayıcısından bağımsız olarak aynı Firebase kullanıcı kimliğiyle tanımlanabilir. Örneğin, bir şifre ile oturum açan bir kullanıcı, gelecekte bir Google hesabını bağlayabilir ve herhangi bir yöntemle oturum açabilir. Veya anonim bir kullanıcı bir Facebook hesabını bağlayabilir ve ardından uygulamanızı kullanmaya devam etmek için Facebook ile oturum açabilir.
Sen başlamadan önce
Uygulamanıza iki veya daha fazla kimlik doğrulama sağlayıcısı (muhtemelen anonim kimlik doğrulama dahil) için destek ekleyin.
Kimlik doğrulama sağlayıcısı kimlik bilgilerini bir kullanıcı hesabına bağlayın
Yetkilendirme sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlamak için:
Herhangi bir kimlik doğrulama sağlayıcısı veya yöntemi kullanarak kullanıcıda oturum açın.
Yeni kimlik doğrulama sağlayıcısı için oturum açma akışını,
signInWith
- yöntemlerinden birinin çağrılması dahil ancak buna kadar tamamlayın. Örneğin, kullanıcının Google ID jetonunu, Facebook erişim jetonunu veya e-posta ve şifresini alın.Yeni kimlik doğrulama sağlayıcısı için bir
Credential
nesnesi alın:// Google Sign-in final credential = GoogleAuthProvider.credential(idToken: idToken); // Email and password sign-in final credential = EmailAuthProvider.credential(email: emailAddress, password: password); // Etc.
Credential
nesnesini, oturum açan kullanıcınınlinkWithCredential()
yöntemine iletin:try { final userCredential = await FirebaseAuth.instance.currentUser ?.linkWithCredential(credential); } on FirebaseAuthException catch (e) { switch (e.code) { case "provider-already-linked": print("The provider has already been linked to the user."); break; case "invalid-credential": print("The provider's credential is not valid."); break; case "credential-already-in-use": print("The account corresponding to the credential already exists, " "or is already linked to a Firebase User."); break; // See the API reference for the full list of error codes. default: print("Unknown error."); } ```
linkWithCredential()
çağrısı başarılı olursa, kullanıcı artık herhangi bir bağlantılı kimlik doğrulama sağlayıcısını kullanarak oturum açabilir ve aynı Firebase verilerine erişebilir.
Bir kullanıcı hesabından bir auth sağlayıcısının bağlantısını kaldırın
Bir kimlik doğrulama sağlayıcısının bir hesapla bağlantısını kaldırabilirsiniz, böylece kullanıcı artık o sağlayıcıyla oturum açamaz.
Bir kimlik doğrulama sağlayıcısının bir kullanıcı hesabıyla bağlantısını kaldırmak için sağlayıcı kimliğini unlink()
yöntemine iletin. Bir kullanıcıya bağlı auth sağlayıcılarının sağlayıcı kimliklerini User
nesnesinin providerData
özelliğinden alabilirsiniz.
try {
await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
switch (e.code) {
case "no-such-provider":
print("The user isn't linked to the provider or the provider "
"doesn't exist.");
break;
default:
print("Unkown error.");
}
}