Telefonla kimlik doğrulama, kullanıcıların kimlik doğrulayıcı olarak telefonlarını kullanarak Firebase'de oturum açmasına olanak tanır. SMS mesajı gönderildi benzersiz bir kod içeren (verilen telefon numarasını kullanarak) kullanıcıya gönderin. Kod yetkilendirildikten sonra kullanıcı oturum açabilir Firebase'e aktarıyoruz.
Son kullanıcıların kimlik doğrulama için sağladığı telefon numaraları, spam ve kötüye kullanımı iyileştirmek amacıyla Google tarafından gönderilip depolanır Firebase dahil ancak bunlarla sınırlı olmamak üzere Google hizmetlerinde önleme amaçlıdır. Geliştiriciler, mobil cihazlarda Firebase Authentication telefon numarası oturum açma hizmeti.authentication kullanmadan önce gerekli son kullanıcı izni
Firebase Telefonla Kimlik Doğrulama tüm ülkelerde desteklenmez. Daha fazla bilgi edinmek için lütfen yayıncının SSS sayfasına bakın.
Kurulum
Telefonla Kimlik Doğrulama özelliğini kullanmaya başlamadan önce şu adımları uyguladığınızdan emin olun:
- Firebase konsolunda Telefonu, Oturum Açma yöntemi olarak etkinleştirin.
- Android: Firebase konsolunda uygulamanızın SHA-1 karmasını henüz ayarlamadıysanız bunu yapın. Uygulamanızın SHA-1 karmasını bulma hakkında bilgi edinmek için İstemcinizin kimliğini doğrulama başlıklı makaleye bakın.
- iOS: Xcode'da projeniz için push bildirimlerini etkinleştirin ve sağlamak APNs kimlik doğrulama anahtarınız Firebase Cloud Messaging (FCM) ile yapılandırılır. Ayrıca, uzaktan bildirimler için arka plan modlarını etkinleştirin. Bu adımla ilgili ayrıntılı açıklamayı görüntülemek için Firebase iOS Phone Auth dokümanlarına bakın.
- Web: Uygulama alan adınızı Firebase konsolunda, OAuth yönlendirme alan adları.
Not; Telefon numarasıyla oturum açma özelliği yalnızca gerçek cihazlarda ve web'de kullanılabilir. Kimlik doğrulama akışınızı cihaz emülatörlerinde test etmek için lütfen Test bölümüne bakın.
Kullanım
Flutter için Firebase Authentication SDK, kullanıcıların telefon numarasıyla oturum açmasını sağlamak için iki ayrı yol sunar. Yerel (ör. Android ve iOS) platformlar Bir telefon numarasını doğrulamak için web'den farklı işlevler vardır. Bu nedenle, her platform için özel olarak iki yöntem mevcuttur:
- Yerel Platform:
verifyPhoneNumber
. - Web Platformu:
signInWithPhoneNumber
.
Yerel: verifyPhoneNumber
Yerel platformlarda, önce kullanıcının telefon numarası doğrulanmalıdır. Ardından kullanıcı oturum açabilir veya hesabını bir
PhoneAuthCredential
Öncelikle kullanıcıdan telefon numarasını istemelisiniz. Sağlandıktan sonra verifyPhoneNumber()
yöntemini çağırın:
await FirebaseAuth.instance.verifyPhoneNumber(
phoneNumber: '+44 7123 123 456',
verificationCompleted: (PhoneAuthCredential credential) {},
verificationFailed: (FirebaseAuthException e) {},
codeSent: (String verificationId, int? resendToken) {},
codeAutoRetrievalTimeout: (String verificationId) {},
);
İşlemeniz gereken 4 ayrı geri çağırma vardır. Bunların her biri, uygulama kullanıcı arayüzünü nasıl güncelleyeceğinizi belirler:
- verificationTamamlandı: Android cihazlarda SMS kodunun otomatik olarak işlenmesi.
- verificationFailed: Geçersiz telefon numaraları veya SMS kotasının aşılması gibi hata olaylarını ele alın.
- codeSent: Firebase'den cihaza gönderilen bir kodu işleyin. Bu işlem, kullanıcılardan kodu girmelerini istemek için kullanılır.
- codeAutoRetrieval1: Otomatik SMS kodu işleme başarısız olduğunda ortaya çıkan zaman aşımını ele alın.
doğrulamaTamamlandı
Bu işleyici yalnızca otomatik SMS kodu çözümlemesini destekleyen Android cihazlarda çağrılacaktır.
Android, SMS kodu cihaza iletildiğinde SMS kodunu otomatik olarak doğrular.
Kullanıcının kodu manuel olarak girmesini gerektirir. Bu etkinlik gerçekleşirse otomatik olarak bir PhoneAuthCredential
sağlanır.
Kullanıcının telefon numarasıyla oturum açmak veya bu numaraya bağlantı vermek için kullanılır.
FirebaseAuth auth = FirebaseAuth.instance;
await auth.verifyPhoneNumber(
phoneNumber: '+44 7123 123 456',
verificationCompleted: (PhoneAuthCredential credential) async {
// ANDROID ONLY!
// Sign the user in (or link) with the auto-generated credential
await auth.signInWithCredential(credential);
},
);
doğrulama başarısız oldu
Firebase, yanlış telefon numarası gibi bir hata döndürürse veya projenin SMS kotası aşılmışsa
bu işleyiciye bir FirebaseAuthException
gönderilir. Bu durumda, kullanıcınıza hataya bağlı olarak bir şeylerin ters gittiğini sorarsınız
girin.
FirebaseAuth auth = FirebaseAuth.instance;
await auth.verifyPhoneNumber(
phoneNumber: '+44 7123 123 456',
verificationFailed: (FirebaseAuthException e) {
if (e.code == 'invalid-phone-number') {
print('The provided phone number is not valid.');
}
// Handle other errors
},
);
kod gönderildi
Firebase cihaza SMS kodu gönderdiğinde bu işleyici bir verificationId
ve resendToken
(resendToken
) ile tetiklenir.
yalnızca Android cihazlarda desteklenir. iOS cihazlar her zaman null
değeri döndürür.)
Tetiklendikten sonra uygulamanızın kullanıcı arayüzünü, kullanıcıdan beklediği SMS kodunu girmesini isteyecek şekilde güncellemek iyi bir zamandır.
SMS kodu girildikten sonra, doğrulama kimliğini SMS koduyla birleştirerek yeni bir PhoneAuthCredential
oluşturabilirsiniz:
FirebaseAuth auth = FirebaseAuth.instance;
await auth.verifyPhoneNumber(
phoneNumber: '+44 7123 123 456',
codeSent: (String verificationId, int? resendToken) async {
// Update the UI - wait for the user to enter the SMS code
String smsCode = 'xxxx';
// Create a PhoneAuthCredential with the code
PhoneAuthCredential credential = PhoneAuthProvider.credential(verificationId: verificationId, smsCode: smsCode);
// Sign the user in (or link) with the credential
await auth.signInWithCredential(credential);
},
);
Varsayılan olarak, Firebase yeni bir SMS mesajını kısa bir süre önce gönderilmişse yeniden göndermez. Ancak bu davranışı geçersiz kılabilirsiniz
yeniden gönderme jetonuyla verifyPhoneNumber
yöntemini forceResendingToken
bağımsız değişkenine tekrar çağırarak.
İşlem başarılı olursa SMS mesajı yeniden gönderilir.
codeAutoRetrievalZaman Aşımı
Otomatik SMS kodu çözümlemesini destekleyen Android cihazlarda, cihaz otomatik olarak bir SMS mesajını belirli bir zaman aralığı içinde çözdü. Zaman aralığı geçtikten sonra cihaz artık çözüm girişiminde bulunmaz mesajı görebilirsiniz.
Varsayılan olarak cihaz 30 saniye bekler, ancak bu süre timeout
bağımsız değişkeniyle özelleştirilebilir:
FirebaseAuth auth = FirebaseAuth.instance;
await auth.verifyPhoneNumber(
phoneNumber: '+44 7123 123 456',
timeout: const Duration(seconds: 60),
codeAutoRetrievalTimeout: (String verificationId) {
// Auto-resolution timed out...
},
);
Web: signInWithPhoneNumber
Web platformlarında kullanıcılar, sağlanan telefon numarasına gönderilen SMS kodunu girerek telefona erişimleri olduğunu onaylayarak oturum açabilir. Daha fazla güvenlik ve spam önleme için kullanıcılardan bir Google reCAPTCHA'yı doldurarak gerçek kişi olduklarını kanıtlamaları istenir. widget'ını tıklayın. Onaylandıktan sonra SMS kodu gönderilir.
Flutter için Firebase Authentication SDK, reCAPTCHA widget'ını varsayılan olarak kullanıma hazır şekilde yönetir ancak gerekirse nasıl gösterileceği ve yapılandırılacağı konusunda kontrol sağlar.
Başlamak için telefon numarası ile signInWithPhoneNumber
yöntemini arayın.
FirebaseAuth auth = FirebaseAuth.instance;
// Wait for the user to complete the reCAPTCHA & for an SMS code to be sent.
ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456');
Yöntemin çağrılması ilk olarak reCAPTCHA widget'ının gösterilmesini tetikler. Kullanıcı
test etmeniz gerekir. Bu işlem tamamlandıktan sonra,
Çözümlenmiş ConfirmationResult
yanıtında confirm
yöntemine SMS kodu:
UserCredential userCredential = await confirmationResult.confirm('123456');
Diğer oturum açma akışlarında olduğu gibi, başarılı bir oturum açma işlemi kimlik doğrulama durumu işleyicilerini de tetikler. ve mevcut abone sayınızdır.
reCAPTCHA Yapılandırması
reCAPTCHA widget'ı, web uygulamanızın güvenliğini sağlayan ve tümüyle yönetilen bir akıştır.
signInWithPhoneNumber
bağımsız değişkeni, kullanılabilecek isteğe bağlı bir RecaptchaVerifier
örneğini kabul ediyor
widget'ı yönetin. Varsayılan olarak, oturum açma akışı tetiklendiğinde widget görünmez bir widget olarak oluşturulur.
"Görünmez" widget'ı, uygulamanızın üst kısmında tam sayfa kalıcı bir kalıcı iletişim kutusu olarak görünür.
Bununla birlikte, kullanıcının kendisini doğrulamak için açıkça basması gereken bir satır içi widget görüntülenebilir.
Satır içi widget eklemek için RecaptchaVerifier
örneğinin container
bağımsız değişkenine bir DOM öğesi kimliği belirtin.
Öğe mevcut ve boş olmalıdır, aksi takdirde hata verilir.
container
bağımsız değişkeni sağlanmazsa widget "görünmez" olarak oluşturulur.
ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456', RecaptchaVerifier(
container: 'recaptcha',
size: RecaptchaVerifierSize.compact,
theme: RecaptchaVerifierTheme.dark,
));
İsterseniz yukarıda gösterildiği gibi size
ve theme
bağımsız değişkenlerini özelleştirerek boyutu ve temayı değiştirebilirsiniz.
Ayrıca reCAPTCHA'nın kullanıcı tarafından tamamlanıp tamamlanmadığı, testin kullanıcı tarafından tamamlanıp tamamlanmadığı gibi etkinlikleri, reCAPTCHA sona erdi veya bir hata oluştu:
RecaptchaVerifier(
onSuccess: () => print('reCAPTCHA Completed!'),
onError: (FirebaseAuthException error) => print(error),
onExpired: () => print('reCAPTCHA Expired!'),
);
Test
Firebase, telefon numaralarının yerel olarak test edilmesi için destek sağlar:
- Firebase Konsolu'nda "Telefon"u seçin. kimlik doğrulama sağlayıcıyı seçin ve "Test için telefon numaraları"nı tıklayın. açılır.
- Yeni bir telefon numarası (ör.
+44 7444 555666
) ve bir test kodu (ör.123456
) girin.
verifyPhoneNumber
veya signInWithPhoneNumber
yöntemlerinden birine test telefon numarası sağlanırsa aslında SMS gönderilmez. Siz
bunun yerine test kodunu doğrudan PhoneAuthProvider
veya signInWithPhoneNumber
ürününün onay sonucu işleyicisine sağlayabilir.