Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Telefonla Kimlik Doğrulama

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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. Kullanıcıya (verilen telefon numarası kullanılarak) benzersiz bir kod içeren bir SMS mesajı gönderilir. Kod yetkilendirildikten sonra kullanıcı Firebase'de oturum açabilir.

Son kullanıcıların kimlik doğrulaması için sağladığı telefon numaraları, Firebase dahil ancak bununla sınırlı olmamak üzere Google hizmetinde spam ve kötüye kullanımın önlenmesini iyileştirmek için Google tarafından gönderilecek ve saklanacaktır. Geliştiriciler, Firebase Authentication telefon numarası ile oturum açma service.authentication'ı kullanmadan önce uygun son kullanıcı onayına sahip olduklarından emin olmalıdır.

Firebase Telefonla Kimlik Doğrulama tüm ülkelerde desteklenmez. Daha fazla bilgi için lütfen SSS'lerine bakın.

Kurmak

Telefonla Kimlik Doğrulamaya başlamadan önce şu adımları uyguladığınızdan emin olun:

  1. Firebase konsolunda Telefonu Oturum Açma yöntemi olarak etkinleştirin.
  2. Android : Firebase konsolunda uygulamanızın SHA-1 karmasını henüz ayarlamadıysanız yapın. Uygulamanızın SHA-1 karmasını bulma hakkında bilgi için İstemcinizin Kimliğini Doğrulama bölümüne bakın.
  3. iOS : Xcode'da projeniz için anında iletme bildirimlerini etkinleştirin ve APNs kimlik doğrulama anahtarınızın Firebase Cloud Messaging (FCM) ile yapılandırıldığından emin olun. Bu adımın ayrıntılı açıklamasını görmek için Firebase iOS Phone Auth belgelerine bakın.
  4. Web : Uygulama alan adınızı Firebase konsolunda , OAuth yönlendirme alanları altında eklediğinizden emin olun .

Not ; Telefon numarasıyla oturum açma yalnızca gerçek cihazlarda ve web'de kullanılabilir. Kimlik doğrulama akışınızı cihaz öykünücülerinde test etmek için lütfen Test Etme bölümüne bakın.

kullanım

Flutter için Firebase Authentication SDK, bir kullanıcının telefon numarasıyla oturum açması için iki ayrı yol sağlar. Yerel (ör. Android ve iOS) platformlar, bir telefon numarasını doğrulamak için web'den farklı işlevler sağlar, bu nedenle her platform için özel olarak iki yöntem vardır:

  • Yerel Platform : verifyPhoneNumber .
  • Web Platformu : signInWithPhoneNumber .

Yerel: verifyPhoneNumber

Yerel platformlarda, önce kullanıcının telefon numarasının doğrulanması gerekir ve ardından kullanıcı oturum açabilir veya hesabını bir PhoneAuthCredential ile bağlayabilir.

Öncelikle kullanıcıdan telefon numarasını istemeniz gerekir. 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) {},
);

Her biri uygulama kullanıcı arayüzünü nasıl güncelleyeceğinizi belirleyen 4 ayrı geri arama vardır:

  1. doğrulama Tamamlandı : Android cihazlarda SMS kodunun otomatik olarak işlenmesi.
  2. doğrulama Failed : Geçersiz telefon numaraları veya SMS kotasının aşılıp aşılmadığı gibi arıza olaylarını işleyin.
  3. codeSent : Firebase'den cihaza bir kod gönderildiğinde, kullanıcılardan kodu girmelerini istemek için kullanılır.
  4. codeAutoRetrievalTimeout : Otomatik SMS kodu işlemenin başarısız olduğu bir zaman aşımını yönetin.

doğrulamaTamamlandı

Bu işleyici yalnızca otomatik SMS kodu çözümlemesini destekleyen Android cihazlarda çağrılır.

SMS kodu cihaza teslim edildiğinde, Android, kullanıcının kodu manuel olarak girmesine gerek kalmadan SMS kodunu otomatik olarak doğrulayacaktır. Bu olay meydana gelirse, kullanıcının telefon numarasıyla oturum açmak veya bu numarayı bağlamak için kullanılabilecek bir PhoneAuthCredential otomatik olarak sağlanı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, örneğin yanlış bir telefon numarası için bir hata döndürürse veya proje için SMS kotası aşılırsa, bu işleyiciye bir FirebaseAuthException gönderilir. Bu durumda, hata koduna bağlı olarak kullanıcınızdan bir şeylerin ters gittiğini sorarsınız.

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 bir SMS kodu gönderdiğinde, bu işleyici bir verificationId kimliği ve resendToken ile tetiklenir (bir resendToken yalnızca Android cihazlarda desteklenir, iOS cihazları her zaman null bir değer döndürür).

Tetiklendikten sonra, kullanıcıdan bekledikleri SMS kodunu girmesini istemek için uygulama kullanıcı arayüzünüzü güncellemek için iyi bir zaman olacaktır. SMS kodu girildikten sonra, yeni bir PhoneAuthCredential oluşturmak için doğrulama kimliğini SMS koduyla birleştirebilirsiniz:

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ı gönderildiyse yeniden göndermez. Ancak, yeniden gönderme belirteci ile doğrulamaPhoneNumber yöntemini verifyPhoneNumber bağımsız değişkenine yeniden çağırarak bu davranışı geçersiz forceResendingToken . Başarılı olursa, SMS mesajı yeniden gönderilecektir.

kodOtomatik AlmaZaman aşımı

Otomatik SMS kodu çözümlemesini destekleyen Android cihazlarda, cihaz bir SMS mesajını belirli bir zaman dilimi içinde otomatik olarak çözmediyse bu işleyici çağrılır. Zaman aralığı geçtikten sonra, cihaz artık gelen mesajları çözmeye çalışmayacaktır.

Varsayılan olarak, cihaz 30 saniye bekler, ancak bu, timeout argümanıyla ö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, verilen telefon numarasına gönderilen SMS kodunu girerek bir telefona erişimleri olduğunu onaylayarak oturum açabilirler. Ek güvenlik ve spam önleme için, kullanıcılardan bir Google reCAPTCHA widget'ını tamamlayarak insan olduklarını kanıtlamaları istenir. Onaylandıktan sonra SMS kodu gönderilecektir.

Flutter için Firebase Kimlik Doğrulama SDK'sı, varsayılan olarak reCAPTCHA widget'ını yönetir, ancak gerekirse nasıl görüntüleneceği ve yapılandırılacağı üzerinde kontrol sağlar. Başlamak için, telefon numarasıyla 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ı, önce reCAPTCHA pencere öğesinin görüntülenmesini tetikleyecektir. Kullanıcı, bir SMS kodu gönderilmeden önce testi tamamlamalıdır. Tamamlandığında, çözümlenen ConfirmationResult yanıtındaki confirm yöntemine SMS kodunu sağlayarak kullanıcıyı oturum açabilirsiniz:

UserCredential userCredential = await confirmationResult.confirm('123456');

Diğer oturum açma akışları gibi, başarılı bir oturum açma, uygulamanız boyunca abone olduğunuz tüm kimlik doğrulama durumu dinleyicilerini tetikler.

reCAPTCHA Yapılandırması

reCAPTCHA pencere aracı, web uygulamanız için güvenlik sağlayan tam olarak yönetilen bir akıştır.

RecaptchaVerifier öğesinin ikinci argümanı, pencere öğesini yönetmek için kullanılabilecek isteğe bağlı bir signInWithPhoneNumber örneğini kabul eder. Varsayılan olarak, oturum açma akışı tetiklendiğinde pencere öğesi görünmez bir pencere öğesi olarak işlenir. "Görünmez" bir widget, uygulamanızın üstünde tam sayfa bir modal olarak görünecektir.

Bununla birlikte, kullanıcının kendilerini doğrulamak için açıkça basması gereken bir satır içi widget'ı görüntülemek mümkündür.

Satır içi pencere öğesi eklemek için RecaptchaVerifier örneğinin container bağımsız değişkenine bir DOM öğesi kimliği belirtin. Öğe var olmalı ve boş olmalıdır, aksi takdirde bir hata verilir. container bağımsız değişkeni sağlanmazsa, pencere öğesi "görünmez" olarak işlenecektir.

ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456', RecaptchaVerifier(
  container: 'recaptcha',
  size: RecaptchaVerifierSize.compact,
  theme: RecaptchaVerifierTheme.dark,
));

size ve theme bağımsız değişkenlerini yukarıda gösterildiği gibi özelleştirerek isteğe bağlı olarak boyutu ve temayı değiştirebilirsiniz.

Kullanıcı tarafından reCAPTCHA'nın tamamlanıp tamamlanmadığı, reCAPTCHA'nın süresinin dolması veya bir hatanın atılması gibi olayları da dinlemek mümkündür:

RecaptchaVerifier(
  onSuccess: () => print('reCAPTCHA Completed!'),
  onError: (FirebaseAuthException error) => print(error),
  onExpired: () => print('reCAPTCHA Expired!'),
);

Test yapmak

Firebase, telefon numaralarını yerel olarak test etmek için destek sağlar:

  1. Firebase Konsolunda, "Telefon" kimlik doğrulama sağlayıcısını seçin ve "Test için telefon numaraları" açılır menüsüne tıklayın.
  2. Yeni bir telefon numarası (örn. +44 7444 555666 ) ve bir test kodu (örn. 123456 ) girin.

DoğrulamaPhoneNumber veya verifyPhoneNumber yöntemlerine bir test telefon numarası signInWithPhoneNumber , aslında hiçbir SMS gönderilmeyecektir. Bunun yerine test kodunu doğrudan PhoneAuthProvider veya signInWithPhoneNumber onay sonuç işleyicisine sağlayabilirsiniz.