Kullanıcılarınızın Yahoo gibi OAuth sağlayıcıları kullanarak Firebase ile kimlik doğrulaması yapmasını sağlayabilirsiniz. Bunun için, uçtan uca oturum açma akışını gerçekleştirmek üzere Firebase SDK'sı ile web tabanlı genel OAuth Girişi'ni uygulamanıza entegre edebilirsiniz.
Başlamadan önce
Kullanıcıların Yahoo hesaplarını kullanarak oturum açmak için öncelikle Firebase projenizde oturum açma sağlayıcısı olarak Yahoo'yu etkinleştirmeniz gerekir:
- Firebase konsolunda Auth bölümünü açın.
- Oturum açma yöntemi sekmesinde Yahoo sağlayıcısını etkinleştirin.
- Bu sağlayıcının geliştirici konsolundaki İstemci Kimliği'ni ve İstemci Gizli Anahtarı'nı sağlayıcı yapılandırmasına ekleyin:
-
Yahoo OAuth istemcisi kaydetmek için Yahoo'ya web uygulaması kaydetme ile ilgili Yahoo geliştirici dokümanlarındaki talimatları uygulayın.
Şu iki OpenID Connect API iznini seçtiğinizden emin olun:
profile
veemail
. - Bu sağlayıcılara uygulama kaydederken projenizin
*.firebaseapp.com
alanını uygulamanızın yönlendirme alanı olarak kaydettiğinizden emin olun.
-
- Kaydet'i tıklayın.
Uygulamanızın SHA-1 dijital parmak izini henüz belirtmediyseniz Firebase konsolunun Ayarlar sayfasından bu işlemi yapın. Uygulamanızın SHA-1 parmak izini almayla ilgili ayrıntılar için İstemcinizin Kimlik Doğrulaması bölümüne bakın.
Oturum açma akışını Firebase SDK'sı ile yönetme
Android uygulaması oluşturuyorsanız kullanıcılarınızın kimliklerini Yahoo hesaplarını kullanarak Firebase ile doğrulamanın en kolay yolu, oturum açma akışının tamamını Firebase Android SDK ile yönetmektir.
Firebase Android SDK ile oturum açma akışını yönetmek için aşağıdaki adımları uygulayın:
Builder yöntemini kullanarak yahoo.com sağlayıcı kimliğini kullanarak bir OAuthProvider örneği oluşturun.
Kotlin+KTX
val provider = OAuthProvider.newBuilder("yahoo.com")
Java
OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");
İsteğe bağlı: OAuth isteğiyle birlikte göndermek istediğiniz ek özel OAuth parametrelerini belirtin.
Kotlin+KTX
// Prompt user to re-authenticate to Yahoo. provider.addCustomParameter("prompt", "login") // Localize to French. provider.addCustomParameter("language", "fr")
Java
// Prompt user to re-authenticate to Yahoo. provider.addCustomParameter("prompt", "login"); // Localize to French. provider.addCustomParameter("language", "fr");
Yahoo'nun desteklediği parametreler için Yahoo OAuth dokümanlarına bakın. Firebase için gerekli parametreleri
setCustomParameters()
ile iletemeyeceğinizi unutmayın. Bu parametreler şunlardır: client_id, redirect_uri, response_type, scope ve state.İsteğe bağlı: Kimlik doğrulama sağlayıcısından istemek istediğiniz
profile
veemail
dışında ek OAuth 2.0 kapsamlarını belirtin. Uygulamanızın Yahoo API'lerinden gizli kullanıcı verilerine erişmesi gerekiyorsa Yahoo geliştirici konsolundaki API İzinleri bölümünün altında, Yahoo API'lerine izin vermeniz gerekir. İstenen OAuth kapsamları, uygulamanın API izinlerindeki önceden yapılandırılmış kapsamlarla tam olarak eşleşmelidir. Örneğin, kullanıcı kişilerine okuma/yazma erişimi istenirse ve uygulamanın API izinlerinde önceden yapılandırılmışsasdct-r
salt okunur OAuth kapsamı yerinesdct-w
iletilmelidir. Aksi takdirde,akış başarısız olur ve son kullanıcıya bir hata gösterilir.Kotlin+KTX
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = listOf("mail-r", "sdct-w")
Java
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. List<String> scopes = new ArrayList<String>() { { // Request access to Yahoo Mail API. add("mail-r"); // This must be preconfigured in the app's API permissions. add("sdct-w"); } }; provider.setScopes(scopes);
Daha fazla bilgi edinmek için Yahoo kapsamları dokümanlarına bakın.OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın. Diğer FirebaseAuth işlemlerinden farklı olarak bu işlemin, bir Özel Chrome Sekmesi açarak kullanıcı arayüzünüzün kontrolünü ele alacağını unutmayın. Bu nedenle, eklediğiniz OnSuccessListeners ve OnFailureListeners öğelerindeki Etkinliğinize referans vermeyin. İşlem kullanıcı arayüzünü başlattığında bunlar hemen ayrılır.
Öncelikle yanıt alıp almadığınızı kontrol etmeniz gerekir. Bu yöntemle oturum açtığınızda Etkinliğiniz arka plana alınır, bu da oturum açma akışı sırasında sistem tarafından geri çekilebileceği anlamına gelir. Böyle bir durumda kullanıcıyı tekrar denemesini istemeyeceğinizden emin olmak için zaten bir sonucun olup olmadığını kontrol etmeniz gerekir.
Bekleyen bir sonuç olup olmadığını kontrol etmek için
getPendingAuthResult
numaralı telefonu arayın:Kotlin+KTX
val pendingResultTask = firebaseAuth.pendingAuthResult if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. } } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Java
Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult(); if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } }); } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Oturum açma akışını başlatmak için
startActivityForSignInWithProvider
numaralı telefonu arayın:Kotlin+KTX
firebaseAuth .startActivityForSignInWithProvider(activity, provider.build()) .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. }
Java
firebaseAuth .startActivityForSignInWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
İşlem başarıyla tamamlandığında, sağlayıcıyla ilişkili OAuth erişim jetonu döndürülen
OAuthCredential
nesnesinden alınabilir.OAuth erişim jetonunu kullanarak Yahoo API'yi çağırabilirsiniz.
Burada
YAHOO_USER_UID
, Yahoo kullanıcısınınfirebaseAuth.getCurrentUser().getProviderData().get(0).getUid()
alanında veyaauthResult.getAdditionalUserInfo().getProfile()
alanında ayrıştırılabilen kimliğidir.Yukarıdaki örnekler oturum açma akışlarına odaklanırken, bir Yahoo sağlayıcısını
startActivityForLinkWithProvider
kullanarak mevcut bir kullanıcıya da bağlayabilirsiniz. Örneğin, aynı kullanıcıya birden fazla sağlayıcı bağlayarak iki sağlayıcıdan biriyle oturum açabilirsiniz.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForLinkWithProvider(activity, provider.build()) .addOnSuccessListener { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForLinkWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Aynı kalıp, son giriş gerektiren hassas işlemler için yeni kimlik bilgileri almak üzere
startActivityForReauthenticateWithProvider
ile kullanılabilir.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForReauthenticateWithProvider(activity, provider.build()) .addOnSuccessListener { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Sonraki adımlar
Bir kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve oturum açan kullanıcının kimlik bilgilerine (kullanıcı adı, şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.
-
Uygulamalarınızda kullanıcının temel profil bilgilerini
FirebaseUser
nesnesinden alabilirsiniz. Kullanıcıları Yönetme başlıklı makaleyi inceleyin. Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açan kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve kullanıcının erişebileceği verileri kontrol etmek için kullanabilirsiniz.
Kimlik doğrulama sağlayıcısı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların birden fazla kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut
numaralı telefonu arayın:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();