Authentication emülatörünü uygulamanızla kullanmadan önce genel Firebase Local Emulator Suite iş akışını anladığınızdan, Local Emulator Suite'ı yükleyip yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.
Bu konuda, üretim için Firebase Authentication çözümleri geliştirme konusunda bilgi sahibi olduğunuz varsayılmaktadır. Gerekirse platform ve kimlik doğrulama tekniği kombinasyonunuzla ilgili dokümanları inceleyin.
Authentication emülatörüyle neler yapabilirim?
Authentication emülatörü, Firebase Authentication hizmetlerinin yüksek kaliteli yerel emülasyonunu sağlar ve üretimde Firebase Authentication bulunan işlevlerin çoğunu sunar. Apple platformları, Android ve Web Firebase SDK'ları ile eşleştirilen emülatör sayesinde şunları yapabilirsiniz:
- E-posta/şifre, telefon numarası/SMS, SMS ile çok öğeli kimlik doğrulama ve üçüncü taraf (ör. Google) kimlik sağlayıcı kimlik doğrulama işlemlerini test etmek için taklit edilen kullanıcı hesapları oluşturma, güncelleme ve yönetme
- Emülasyon yapılan kullanıcıları görüntüleme ve düzenleme
- Özel jeton kimlik doğrulama sistemlerinin prototipini oluşturma
- Emulator kullanıcı arayüzündeki Günlükler sekmesinde kimlik doğrulama ile ilgili mesajları kontrol edin.
Bir Firebase projesi seçin
Firebase Local Emulator Suite, tek bir Firebase projesi için ürünleri taklit eder.
Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce çalışma dizininizde firebase use
komutunu çalıştırın. Alternatif olarak, her bir emülatör komutuna --project
işaretini iletebilirsiniz.
Local Emulator Suite Gerçek Firebase projelerinin ve demo projelerinin emülasyonunu destekler.
Proje türü | Özellikler | Emülatörlerle kullanma |
---|---|---|
Real |
Gerçek bir Firebase projesi, sizin oluşturup yapılandırdığınız (büyük olasılıkla Firebase konsolu üzerinden) bir projedir. Gerçek projelerde veritabanı örnekleri, depolama paketleri, işlevler veya söz konusu Firebase projesi için ayarladığınız diğer kaynaklar gibi canlı kaynaklar bulunur. |
Gerçek Firebase projeleriyle çalışırken desteklenen ürünlerin herhangi biri veya tümü için emülatör çalıştırabilirsiniz. Emülasyonunu yapmadığınız tüm ürünler için uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama paketi, işlev vb.) etkileşimde bulunur. |
Demo |
Demo Firebase projesinde gerçek Firebase yapılandırması ve canlı kaynaklar yoktur. Bu projelere genellikle codelab'ler veya diğer eğitimler aracılığıyla erişilir. Demo projelerin proje kimlikleri |
Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşimde bulunur. Uygulamanız, emülatörün çalışmadığı bir kaynakla etkileşime girmeye çalışırsa bu kod başarısız olur. |
Mümkün olan her durumda demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:
- Emülatörleri Firebase projesi oluşturmadan çalıştırabileceğiniz için daha kolay kurulum
- Kodunuz yanlışlıkla emüle edilmemiş (üretim) kaynakları çağırdığında veri değişikliği, kullanım ve faturalandırma olasılığı olmadığından daha güçlü güvenlik
- SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek sunar.
Uygulamanızı emülatörle iletişim kuracak şekilde yapılandırma
Android, iOS ve web SDK'ları
Uygulama içi yapılandırmanızı veya test sınıflarınızı, Authentication emülatörüyle etkileşimde bulunacak şekilde aşağıdaki gibi ayarlayın.
Kotlin
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Swift
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)
Web
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://127.0.0.1:9099");
Web
const auth = firebase.auth(); auth.useEmulator("http://127.0.0.1:9099");
Authentication ile Cloud Functions veya Firebase Security Rules ile Cloud Firestore ya da Realtime Database arasındaki etkileşimlerin prototipini oluşturmak ve bunları test etmek için ek kurulum gerekmez. AuthenticationEmülatör yapılandırıldığında ve diğer emülatörler çalıştırıldığında otomatik olarak birlikte çalışırlar.
Admin SDK
Firebase Admin SDK, FIREBASE_AUTH_EMULATOR_HOST
ortam değişkeni ayarlandığında otomatik olarak Authentication emülatörüne bağlanır.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
Cloud Functions emülatörünün Authentication emülatörünün farkında olduğunu unutmayın. Bu nedenle, Cloud Functions ve Authentication emülatörleri arasındaki entegrasyonları test ederken bu adımı atlayabilirsiniz. Ortam değişkeni, Cloud Functions içindeki Admin SDK için otomatik olarak ayarlanır.
Ortam değişkeni ayarlandığında, Firebase Admin SDK, yerel geliştirme ve testi kolaylaştırmak için Authentication emülatörü tarafından verilen imzasız kimlik jetonlarını ve oturum çerezlerini (sırasıyla verifyIdToken
ve createSessionCookie
yöntemleriyle) kabul eder. Lütfen ortam değişkenini üretimde ayarlamadığınızdan emin olun.
Admin SDK kodunuzun başka bir ortamda çalışan paylaşılan bir emülatöre bağlanmasını istiyorsanız Firebase KSA'yı kullanarak ayarladığınız proje kimliğini belirtmeniz gerekir. Doğrudan initializeApp
proje kimliği iletebilir veya GCLOUD_PROJECT
ortam değişkenini ayarlayabilirsiniz.
Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Ortam Değişkeni
export GCLOUD_PROJECT="your-project-id"
Kimlik jetonları
Güvenlik nedeniyle Authentication emülatör, yalnızca diğer Firebase emülatörleri veya yapılandırıldığında Firebase Admin SDK'sı tarafından kabul edilen imzalanmamış kimlik jetonları verir. Bu jetonlar, üretim Firebase hizmetleri veya üretim modunda çalışan Firebase Admin SDK'sı (ör. yukarıda açıklanan kurulum adımları olmadan varsayılan davranış) tarafından reddedilir.
Emülatörü başlatma
Authentication emülatörünü Emulator Suite UI aracılığıyla etkileşimli olarak, yerel REST arayüzü üzerinden ise etkileşimsiz olarak kullanabilirsiniz. Aşağıdaki bölümlerde etkileşimli ve etkileşimsiz kullanım alanları ele alınmaktadır.
Authentication emülatörünü, REST arayüzünü ve Emulator Suite UI başlatmak için şu komutu çalıştırın:
firebase emulators:start
Emüle edilmiş e-posta, e-posta bağlantısı ve anonim kimlik doğrulama
Anonim kimlik doğrulama için uygulamanız, platformunuzun (iOS, Android, web) oturum açma mantığını kullanabilir.
E-posta/şifre kimlik doğrulaması için Authentication SDK yöntemlerini kullanarak uygulamanızdan Authentication emülatörüne kullanıcı hesapları ekleyerek veya Emulator Suite UI'ı kullanarak prototip oluşturmaya başlayabilirsiniz.
- Emulator Suite UI bölümünde Authentication (Kimlik Doğrulama) sekmesini tıklayın.
- Kullanıcı ekle düğmesini tıklayın.
- Kullanıcı hesabı oluşturma sihirbazını takip ederek e-posta kimlik doğrulama alanlarını doldurun.
Test kullanıcısı oluşturulduktan sonra uygulamanız, platformunuz için SDK mantığıyla kullanıcıyı oturum açabilir ve oturumunu kapatabilir (iOS, Android, web).
E-posta doğrulama/e-posta bağlantısıyla oturum açma akışlarını test etmek için emülatör, firebase emulators:start
komutunun yürütüldüğü terminale bir URL yazdırır.
i To verify the email address customer@ex.com, follow this link:
http://127.0.0.1:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key
Doğrulama etkinliğini simüle etmek için bağlantıyı tarayıcınıza yapıştırın ve doğrulamanın başarılı olup olmadığını kontrol edin.
{
"authEmulator": {
"success": "The email has been successfully verified.",
"email": "customer@example.com"
}
}
Şifre sıfırlama işlemlerini test etmek için emülatör, newPassword parametresi (gerekirse değiştirebilirsiniz) de dahil olmak üzere benzer bir URL'yi terminale yazdırır.
http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD
Etkileşimsiz test
E-posta/şifre kullanıcı hesaplarını yönetmek için Emulator Suite UI veya müşteri kodunu kullanmak yerine, kullanıcı hesapları oluşturmak ve silmek için REST API'leri çağıran ve öykünücü e-posta doğrulama URL'sini doldurmak için bant dışı e-posta doğrulama kodlarını getiren test kurulumu komut dosyaları yazabilirsiniz. Bu sayede platform ve test kodu ayrı tutulur ve etkileşimli olmayan testler yapabilirsiniz.
Etkileşimli olmayan e-posta ve şifre test akışlarında tipik sıra aşağıdaki gibidir.
- Authentication signUp REST uç noktası ile kullanıcı oluşturun.
- Testleri gerçekleştirmek için e-posta adreslerini ve şifrelerini kullanarak kullanıcıların oturumunu açın.
- Testleriniz için geçerliyse emülatöre özgü REST uç noktasından kullanılabilir bant dışı e-posta doğrulama kodlarını getirin.
- Verileri temizlemek için emülatöre özgü REST uç noktası ile kullanıcı kayıtlarını temizleyin.
Emüle edilmiş telefon/SMS kimlik doğrulaması
Telefon kimlik doğrulaması için Auth Emulator şu özellikleri desteklemez:
- reCAPTCHA ve APN akışları. Emülatörle etkileşim kuracak şekilde yapılandırıldıktan sonra istemci SDK'ları, bu doğrulama yöntemlerini entegrasyon testi için açıklanan yönteme benzer şekilde devre dışı bırakır (iOS, Android, web).
- Firebase konsolunda önceden yapılandırılmış kodlara sahip test telefon numaraları.
Aksi takdirde, istemci kodu açısından telefon/SMS kimlik doğrulama akışı, üretim için açıklanan akışla (iOS, Android, web) aynıdır.
Emulator Suite UI kullanma:
- Emulator Suite UI bölümünde Authentication (Kimlik Doğrulama) sekmesini tıklayın.
- Kullanıcı ekle düğmesini tıklayın.
- Telefonla kimlik doğrulama alanlarını doldurarak kullanıcı hesabı oluşturma sihirbazını takip edin.
Ancak telefonla kimlik doğrulama akışlarında, operatörle iletişime geçmek kapsam dışı olduğundan ve yerel test için uygun olmadığından emülatör, kısa mesajların teslimini TETİKLEMEZ. Bunun yerine, emülatör firebase emulators:start
komutunu çalıştırdığınız terminale SMS ile gönderilecek kodu yazdırır. Kullanıcıların kısa mesajlarını kontrol etmesini simüle etmek için bu kodu uygulamaya girin.
Etkileşimsiz test
Etkileşimli olmayan telefon kimlik doğrulaması testi için, kullanılabilir SMS kodlarını almak üzere Authentication öykünücü REST API'sini kullanın. Akışı her başlattığınızda kodun farklı olduğunu unutmayın.
Tipik sıra aşağıdaki gibidir.
- Doğrulama sürecini başlatmak için platformu
signInWithPhoneNumber
arayın. - Emülatöre özgü REST uç noktasını kullanarak doğrulama kodunu alın.
- Doğrulama kodunu kullanarak
confirmationResult.confirm(code)
numaralı telefonu normal şekilde arayın.
Çok öğeli SMS
Authentication emülatörü, iOS, Android ve web için üretimde kullanılabilen SMS çok faktörlü kimlik doğrulama (MFA) akışlarının prototipini oluşturmayı ve test etmeyi destekler.
Emülatöre sahte bir kullanıcı eklediğinizde çok öğeli kimlik doğrulamayı etkinleştirebilir ve ikinci öğe SMS mesajlarının gönderileceği bir veya daha fazla telefon numarası yapılandırabilirsiniz. İletiler, firebase emulators:start
komutunu çalıştırdığınız terminale çıkış olarak verilir ve REST arayüzünden kullanılabilir.
Emüle edilmiş üçüncü taraf kimlik sağlayıcı (IdP) kimlik doğrulaması
AuthenticationEmülatör, iOS, Android veya web uygulamalarınızda üretim kodunda herhangi bir değişiklik yapmadan birçok üçüncü taraf kimlik doğrulama akışını test etmenizi sağlar. Kimlik doğrulama akışlarıyla ilgili örnekler için uygulamanızda kullanabileceğiniz çeşitli sağlayıcı ve platform kombinasyonlarının dokümanlarına bakın.
Genel olarak, Firebase SDK'sını kullanarak kimlik doğrulamayı iki şekilde yapabilirsiniz:
- Uygulamanız, kimlik bilgilerini almak için üçüncü taraf IdP sağlayıcılarla yapılan tüm etkileşimler de dahil olmak üzere tüm sürecin uçtan uca SDK tarafından yönetilmesine izin veriyor.
- Uygulamanız, üçüncü taraf sağlayıcının SDK'sını kullanarak kimlik bilgilerini manuel olarak alır ve bu kimlik bilgilerini Authentication SDK'sına iletir.
Yine yukarıdaki doküman bağlantısını kontrol edin ve kullanmak istediğiniz akışa (Firebase SDK tarafından yönetilen veya manuel kimlik bilgisi alma) aşina olduğunuzdan emin olun. Authentication emülatörü, her iki yaklaşımın da test edilmesini destekler.
Firebase SDK'sı tarafından desteklenen IdP akışlarını test etme
Uygulamanızda Microsoft, GitHub veya Yahoo ile oturum açma için OAuthProvider
gibi herhangi bir Firebase SDK uçtan uca akışı kullanılıyorsa etkileşimli test için Authentication emülatörü, signinWithPopup
veya signInWithRedirect
yöntemini çağıran web uygulamalarından kimlik doğrulamayı test etmenize yardımcı olmak üzere ilgili oturum açma sayfasının yerel bir sürümünü sunar. Yerel olarak sunulan bu oturum açma sayfası, platformunuzun web görünümü kitaplığı tarafından oluşturulan mobil uygulamalarda da görünür.
Akışlar devam ederken emülatör, gerektiğinde sahte üçüncü taraf kullanıcı hesapları ve kimlik bilgileri oluşturur.
Kimlik bilgileri manuel olarak alınarak IdP akışlarını test etme
"Manuel" oturum açma tekniklerini kullanıyor ve platformunuzun signInWithCredentials
yöntemini çağırıyorsanız uygulamanız her zamanki gibi gerçek üçüncü taraf oturum açma isteğinde bulunur ve gerçek üçüncü taraf kimlik bilgilerini alır.
Emülatörün yalnızca Google ile oturum açma, Apple ve JSON Web Token (JWT) olarak uygulanan kimlik jetonlarını kullanan diğer sağlayıcılardan alınan kimlik bilgileri için signInWithCredential
kimlik doğrulamasını desteklediğini unutmayın. Erişim jetonları (ör. Facebook veya Twitter tarafından sağlanan ve JWT olmayanlar) desteklenmez. Sonraki bölümde bu durumlarda kullanılabilecek bir alternatif ele alınmaktadır.
Etkileşimsiz test
Etkileşimli olmayan test için bir yaklaşım, kullanıcı tıklamalarını emülatör tarafından sunulan oturum açma sayfasında otomatikleştirmektir. Web uygulamaları için WebDriver gibi bir kontrol arayüzü kullanın. Mobil için Espresso veya Xcode gibi platformunuzdaki kullanıcı arayüzü testi araçlarını kullanın.
Alternatif olarak, kodunuzu signInWithCredential
kullanacak şekilde güncelleyebilir (ör. bir kod dalında) ve hesaplar için gerçek kimlik bilgileri yerine sahte kimlik jetonlarıyla jeton kimlik doğrulama akışı kullanabilirsiniz.
- IDP'den idToken'ları alan kodunuzun bölümünü yeniden bağlayın veya yorum satırı haline getirin. Bu sayede, testleriniz sırasında gerçek kullanıcı adları ve şifreler girmeniz gerekmez ve testleriniz IDP'deki API kotalarından ve sıklık sınırlarından etkilenmez.
- İkincisi,
signInWithCredential
için jeton yerine değişmez bir JSON dizesi kullanın. Web SDK'sını örnek olarak kullanarak kodu şu şekilde değiştirebilirsiniz:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
'{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));
Bu kod, emülatörle birlikte kullanıldığında Google'da foo@example.com
e-posta adresine sahip bir kullanıcının kimliğini başarıyla doğrular. Alt alanı, farklı kullanıcıların oturum açmasını taklit eden herhangi bir dizeyle değiştirilebilen bir birincil anahtar olarak düşünebilirsiniz. firebase.auth.GoogleAuthProvider
yerine örneğin new firebase.auth.OAuthProvider('yahoo.com')
veya sahte olarak kullanmak istediğiniz başka bir sağlayıcı kimliği koyabilirsiniz.
Özel jeton kimlik doğrulamasını taklit etme
Authentication emülatörü, üretim Authentication belgelerinde açıklandığı gibi, desteklenen platformlarda signInWithCustomToken
yöntemi çağrılarını kullanarak özel JSON Web Jetonları ile kimlik doğrulamayı işler.
Authentication emülatörünün üretimden farkı
Firebase Authentication emülatörü, üretim ürününün birçok özelliğini simüle eder. Ancak her türlü kimlik doğrulama sistemi birden fazla düzeyde (cihaz, üçüncü taraf sağlayıcılar, Firebase vb.) güvenliğe büyük ölçüde bağlı olduğundan, emülatörün tüm akışları düzgün şekilde yeniden oluşturması zordur.
Cloud IAM
Firebase Emulator Suite, çalıştırma için IAM ile ilgili davranışları kopyalamaya veya bunlara uymaya çalışmaz. Emülatörler, sağlanan Firebase Security Rules'a uyar. Ancak normalde IAM'in kullanılacağı durumlarda (ör. Cloud Functions çağırma hizmet hesabını ve dolayısıyla izinleri ayarlamak için) emülatör yapılandırılamaz ve geliştirici makinenizde genel olarak kullanılabilen hesabı doğrudan yerel bir komut dosyası çalıştırmaya benzer şekilde kullanır.
Mobil cihazda e-posta bağlantısı üzerinden oturum açma
Mobil platformlarda e-posta bağlantısıyla oturum açma, Firebase Dynamic Links'i kullandığından bu tür bağlantıların tümü web platformunda (mobil) açılır.
Üçüncü taraf oturum açma
Üçüncü taraf oturum açma akışlarında Firebase, Authentication Twitter ve GitHub gibi üçüncü taraf sağlayıcıların güvenli kimlik bilgilerini kullanır.
Google ve Apple gibi OpenID Connect sağlayıcılarından alınan gerçek kimlik bilgileri, Authentication emülatörü tarafından kabul edilir. OpenID Connect sağlayıcıları dışındaki sağlayıcılardan alınan kimlik bilgileri desteklenmez.
E-posta / SMS ile oturum açma
Üretim uygulamalarında, e-posta ve SMS ile oturum açma akışları, kullanıcının aldığı mesajı kontrol ettiği ve oturum açma arayüzüne giriş kodu girdiği eşzamansız bir işlemi içerir. Authentication emülatörü herhangi bir e-posta veya SMS mesajı göndermez ancak yukarıda açıklandığı gibi giriş kodları oluşturur ve bunları testte kullanılmak üzere terminale gönderir.
Emülatör, Firebase konsolunda olduğu gibi sabit giriş kodlarına sahip test telefon numaraları tanımlama özelliğini desteklemez.
Özel jeton kimlik doğrulaması
Authentication emülatörü, özel jetonların imzasını veya geçerlilik süresini doğrulamıyor. Bu sayede, prototip oluşturma ve test senaryolarında elle oluşturulmuş jetonları kullanabilir ve jetonları süresiz olarak yeniden kullanabilirsiniz.
Hız sınırlaması / kötüye kullanıma karşı koruma
Authentication emülatörü, üretimde hız sınırlama veya kötüye kullanımı önleme özelliklerini kopyalamaz.
Engelleme işlevleri
Üretim ortamında, hem beforeCreate
hem de beforeSignIn
etkinlikleri tetiklendikten sonra kullanıcılar depolama alanına bir kez yazılır. Ancak teknik sınırlamalar nedeniyle Authentication emülatörü, mağazaya iki kez yazar: bir kez kullanıcı oluşturulduktan sonra, bir kez de oturum açıldıktan sonra. Bu, yeni kullanıcılar için Authentication emülatöründe getAuth().getUser()
işlevini başarılı bir şekilde çağırabileceğiniz ancak bunu üretimde yaparken hatayla karşılaşacağınız anlamına gelir.beforeSignIn
Sonrasında ne olacak?
Seçilmiş bir dizi video ve ayrıntılı "Nasıl Yapılır?" örnekleri için Firebase Emulators Eğitimi Oynatma Listesi'ni inceleyin.
Tetiklenen işlevler Authentication ile tipik bir entegrasyon olduğundan, Cloud Functions for Firebase emülatörü hakkında daha fazla bilgiyi İşlevleri yerel olarak çalıştırma başlıklı makalede bulabilirsiniz.