SMS mesajı göndererek bir kullanıcının oturumunu açmak için Firebase Authentication kullanabilirsiniz kullanıcının telefonuna. Kullanıcı SMS mesajı.
Uygulamanıza telefon numarası ile oturum açma bilgisi eklemenin en kolay yolu FirebaseUI, telefon için oturum açma akışlarını uygulayan bir açılır oturum açma widget'ı içerir numarayla oturum açmanın yanı sıra şifre tabanlı ve birleşik oturum açma. Bu doküman , Firebase SDK'sını kullanarak telefon numarası oturum açma akışının nasıl uygulanacağını açıklar.
Başlamadan önce
Henüz yapmadıysanız ilk kullanıma hazırlama snippet'ini Firebase konsolunu içinde açıklandığı şekilde projenize ekleyin Firebase'i JavaScript projenize ekleyin.Güvenlikle ilgili sorunlar
Yalnızca telefon numarası kullanarak kimlik doğrulama, kolay olsa da daha az güvenlidir diğer mevcut yöntemlerden farklıdır. Çünkü bir telefon numarasına sahip olmak kullanıcılar arasında kolayca aktarılabilir. Ayrıca, birden fazla kullanıcısı olan cihazlarda SMS mesajı alabilen tüm kullanıcılar bir hesapta oturum açmak için cihazın telefon numarası.
Uygulamanızda telefon numarasına dayalı oturum açma özelliği kullanıyorsanız bunu sunmalısınız güvenli oturum açma yöntemlerine yer verir ve kullanıcıları, güvenliği olumlu sonuçlar doğurabilir.
Firebase projeniz için Telefon Numarasıyla oturum açmayı etkinleştirme
Kullanıcıların SMS ile oturum açmasını sağlamak için önce Telefon Numarası oturum açma özelliğini etkinleştirmeniz gerekir yöntemi belirleyin:
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Oturum Açma Yöntemi sayfasında Telefon Numarası'nı etkinleştirin oturum açma yöntemini kullanabilirsiniz.
- Aynı sayfada, uygulamanızı barındıracak alan adı OAuth yönlendirme alanları bölümüne alanınızı ekleyin. localhost'un barındırılan bir telefon kimlik doğrulaması amacıyla kullanılabilir.
reCAPTCHA doğrulayıcıyı ayarlama
Kullanıcıların telefon numaralarıyla oturum açabilmesi için önce gerekli ayarları yapmanız gerekir: Firebase'in reCAPTCHA doğrulayıcısı. Firebase, aşağıdakiler gibi kötüye kullanımları önlemek için reCAPTCHA'yı kullanır: telefon numarası doğrulama isteğinin izin verilen alan adları için geçerlidir.
Manuel olarak bir reCAPTCHA istemcisi oluşturmanız gerekmez;
Firebase SDK'sının RecaptchaVerifier
nesnesi, Firebase otomatik olarak
gerekli istemci anahtarlarını ve gizli anahtarları oluşturur ve işler.
RecaptchaVerifier
nesnesi şunları destekler:
görünmez
reCAPTCHA: Genellikle herhangi bir kullanıcıya ihtiyaç duymadan kullanıcıyı doğrulayabilir
işlemine ve her zaman kullanıcı etkileşimi gerektiren reCAPTCHA widget'ına
.
Temel oluşturulan reCAPTCHA, Auth örneğinde, reCAPTCHA'yı oluşturmadan önce dil kodunu kontrol edin. Yukarıda belirtilen yerelleştirme kullanıcıya gönderilen ve doğrulama kodunu içeren SMS mesajı için de geçerli olur.
Web
import { getAuth } from "firebase/auth"; const auth = getAuth(); auth.languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // auth.useDeviceLanguage();
Web
firebase.auth().languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // firebase.auth().useDeviceLanguage();
Görünmez reCAPTCHA'yı kullan
Görünmez bir reCAPTCHA kullanmak için RecaptchaVerifier
nesnesi oluşturun
size
parametresi invisible
olarak ayarlanmış ve
oturum açma formunuzu gönderen düğmenin kimliğini belirtir. Örneğin:
Web
import { getAuth, RecaptchaVerifier } from "firebase/auth"; const auth = getAuth(); window.recaptchaVerifier = new RecaptchaVerifier(auth, 'sign-in-button', { 'size': 'invisible', 'callback': (response) => { // reCAPTCHA solved, allow signInWithPhoneNumber. onSignInSubmit(); } });
Web
window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('sign-in-button', { 'size': 'invisible', 'callback': (response) => { // reCAPTCHA solved, allow signInWithPhoneNumber. onSignInSubmit(); } });
reCAPTCHA widget'ını kullanma
Görünür reCAPTCHA widget'ını kullanmak için sayfanızda bir öğe oluşturarak şunları yapabilirsiniz:
widget'ı içermek ve ardından bir RecaptchaVerifier
nesnesi oluşturmak istiyorsanız
kapsayıcının kimliğini belirtmeniz gerekir. Örnek:
Web
import { getAuth, RecaptchaVerifier } from "firebase/auth"; const auth = getAuth(); window.recaptchaVerifier = new RecaptchaVerifier(auth, 'recaptcha-container', {});
Web
window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');
İsteğe bağlı: reCAPTCHA parametrelerini belirtin
İsterseniz
RecaptchaVerifier
nesnesi
reCAPTCHA veya reCAPTCHA geçerlilik süresi, kullanıcı formu göndermeden önce sona erer:
Web
import { getAuth, RecaptchaVerifier } from "firebase/auth"; const auth = getAuth(); window.recaptchaVerifier = new RecaptchaVerifier(auth, 'recaptcha-container', { 'size': 'normal', 'callback': (response) => { // reCAPTCHA solved, allow signInWithPhoneNumber. // ... }, 'expired-callback': () => { // Response expired. Ask user to solve reCAPTCHA again. // ... } });
Web
window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container', { 'size': 'normal', 'callback': (response) => { // reCAPTCHA solved, allow signInWithPhoneNumber. // ... }, 'expired-callback': () => { // Response expired. Ask user to solve reCAPTCHA again. // ... } });
İsteğe bağlı: reCAPTCHA'yı önceden oluşturma
Oturum açma isteği göndermeden önce reCAPTCHA'yı önceden oluşturmak isterseniz
render
adlı kişiyi ara:
Web
recaptchaVerifier.render().then((widgetId) => { window.recaptchaWidgetId = widgetId; });
Web
recaptchaVerifier.render().then((widgetId) => { window.recaptchaWidgetId = widgetId; });
render
sorun çözüldükten sonra, reCAPTCHA'nın widget kimliğini alırsınız. Bu kimlik,
telefon görüşmeleri yapmak için
reCAPTCHA API'si:
Web
const recaptchaResponse = grecaptcha.getResponse(recaptchaWidgetId);
Web
const recaptchaResponse = grecaptcha.getResponse(recaptchaWidgetId);
Kullanıcının telefonuna doğrulama kodu gönderme
Telefon numarasıyla oturum açmayı başlatmak için kullanıcıya şunu isteyen bir arayüz sunun:
telefon numarasını vermesini isteyebilir, sonra da
Firebase'den bir istek göndermesini istemek için signInWithPhoneNumber
kullanıcının telefonuna SMS ile gönderilen kimlik doğrulama kodu:
-
Kullanıcının telefon numarasını alın.
Yasal şartlar değişiklik gösterse de en iyi uygulama olarak ve kullanıcılarınızın beklentilerini belirlemek amacıyla, kullandıkları cihazlarda doğrulama ve standart kullanım için bir SMS mesajı alabilirler. uygulanır.
signInWithPhoneNumber
adlı kişiyi kullanıcının telefonuna vererek ara numarası ve daha önce oluşturduğunuzRecaptchaVerifier
.Web
import { getAuth, signInWithPhoneNumber } from "firebase/auth"; const phoneNumber = getPhoneNumberFromUserInput(); const appVerifier = window.recaptchaVerifier; const auth = getAuth(); signInWithPhoneNumber(auth, phoneNumber, appVerifier) .then((confirmationResult) => { // SMS sent. Prompt user to type the code from the message, then sign the // user in with confirmationResult.confirm(code). window.confirmationResult = confirmationResult; // ... }).catch((error) => { // Error; SMS not sent // ... });
Web
const phoneNumber = getPhoneNumberFromUserInput(); const appVerifier = window.recaptchaVerifier; firebase.auth().signInWithPhoneNumber(phoneNumber, appVerifier) .then((confirmationResult) => { // SMS sent. Prompt user to type the code from the message, then sign the // user in with confirmationResult.confirm(code). window.confirmationResult = confirmationResult; // ... }).catch((error) => { // Error; SMS not sent // ... });
signInWithPhoneNumber
hata verirse Kullanıcının tekrar deneyebilmesi için reCAPTCHA:grecaptcha.reset(window.recaptchaWidgetId); // Or, if you haven't stored the widget ID: window.recaptchaVerifier.render().then(function(widgetId) { grecaptcha.reset(widgetId); });
signInWithPhoneNumber
yöntemi, reCAPTCHA testini düzenler.
başlar ve kullanıcı sorgulamayı geçerse
Firebase Authentication, şu numaraya doğrulama kodu içeren bir SMS mesajı gönder:
telefon numarası.
Doğrulama koduyla kullanıcının oturumunu açma
signInWithPhoneNumber
çağrısı başarılı olduktan sonra
kullanıcının SMS ile aldığı doğrulama kodunu yazmasını isteyin. Ardından, kullanıcının hesabında oturum açın.
koduconfirm
ConfirmationResult
nesne iletildi
signInWithPhoneNumber
'ın sipariş karşılama işleyicisi (yani
then
blok). Örneğin:
Web
const code = getCodeFromUserInput(); confirmationResult.confirm(code).then((result) => { // User signed in successfully. const user = result.user; // ... }).catch((error) => { // User couldn't sign in (bad verification code?) // ... });
Web
const code = getCodeFromUserInput(); confirmationResult.confirm(code).then((result) => { // User signed in successfully. const user = result.user; // ... }).catch((error) => { // User couldn't sign in (bad verification code?) // ... });
confirm
çağrısı başarılı olduysa kullanıcı başarıyla tamamlanmış demektir
oturum açıldı.
Ara AuthCredential nesnesini alma
KullanıcınınAuthCredential
onay sonucundan doğrulama kodunu iletin ve
doğrulama kodunu PhoneAuthProvider.credential
yerine
confirm
aranıyor:
var credential = firebase.auth.PhoneAuthProvider.credential(confirmationResult.verificationId, code);
Ardından, aşağıdaki kimlik bilgisini kullanarak kullanıcının oturum açmasını sağlayabilirsiniz:
firebase.auth().signInWithCredential(credential);
Hayali telefon numaralarıyla test etme
Firebase konsolu üzerinden geliştirme için kurgusal telefon numaraları ayarlayabilirsiniz. Hayali telefonla test etme sayılar şu faydaları sağlar:
- Kullanım kotanızı tüketmeden telefon numarası kimlik doğrulamasını test edin.
- Gerçek bir SMS mesajı göndermeden telefon numarası kimlik doğrulamasını test edin.
- Kısıtlamadan, aynı telefon numarasıyla art arda testler yapın. Bu Uygulama mağazası inceleme sürecinde en az test için aynı telefon numarasını kullanın.
- Örneğin, Google Play Hizmetleri olmadan iOS simülatöründe veya Android emülatöründe geliştirme yeteneği.
- Entegrasyon testlerini, normalde uygulanan güvenlik kontrolleri tarafından engellenmeden yaz gerçek telefon numaraları için kullandığı bir teknolojidir.
Hayali telefon numaraları aşağıdaki şartları karşılamalıdır:
- Gerçekten hayali olan ve daha önce var olmayan telefon numaraları kullandığınızdan emin olun. Firebase Authentication, gerçek kullanıcılar tarafından kullanılan mevcut telefon numaralarını test numarası olarak ayarlamanıza izin vermez. Seçeneklerden biri, ABD test telefon numaraları olarak 555 önekli numarayı kullanmaktır. Örneğin: +1 650-555-3434
- Telefon numaralarının uzunlukları ve diğer özellikleri kısıtlar. Yine de gerçek bir kullanıcının telefon numarasıyla aynı doğrulamadan geçerler.
- Geliştirme için en fazla 10 telefon numarası ekleyebilirsiniz.
- Tahmin edilmesi ve değiştirilmesi zor test telefon numaraları/kodları kullanın yapmanızı öneririm.
Hayali telefon numaraları ve doğrulama kodları oluşturma
- Firebase konsolunda şunu açın: Kimlik Doğrulama bölümüne bakın.
- Henüz yapmadıysanız Oturum açma yöntemi sekmesinde Telefon sağlayıcısını etkinleştirin.
- Test için telefon numaraları akordeon menüsünü açın.
- Test etmek istediğiniz telefon numarasını belirtin. Örneğin: +1 650-555-3434.
- Bu numara için 6 haneli doğrulama kodunu girin. Örneğin: 654321.
- Numarayı ekleyin. Gerekirse telefon numarasını silebilir ve fareyle ilgili satırın üzerine gelip çöp kutusu simgesini tıklayarak kodu.
Manuel test
Uygulamanızda hayali bir telefon numarasını doğrudan kullanmaya başlayabilirsiniz. Bu şekilde şunları yapabilirsiniz: Geliştirme aşamalarında kota sorunları veya kısıtlamayla karşılaşmadan manuel testler gerçekleştirme. Google Play Hizmetleri olmadan doğrudan bir iOS simülatöründen veya Android emülatöründen de test edebilirsiniz yüklendi.
Hayali telefon numarasını girip doğrulama kodunu gönderdiğinizde, gönderilir. Bunun yerine, imza işlemini tamamlamak için önceden yapılandırılmış doğrulama kodunu sağlamanız gerekir inç
Oturum açma işlemi tamamlandığında, bu telefon numarasıyla bir Firebase kullanıcısı oluşturulur. İlgili içeriği oluşturmak için kullanılan kullanıcı, gerçek bir telefon numarası kullanıcısıyla aynı davranışa ve özelliklere sahiptir; ve kullanıcı, Realtime Database/Cloud Firestore ve diğer hizmetlerde aynı şekilde çalışır. sırasında basılan kimlik jetonu bu işlem gerçek bir telefon numarası kullanıcısıyla aynı imzaya sahiptir.
Diğer bir seçenek de, özel hak taleplerine ilişkin ve erişim.
Entegrasyon testi
Firebase Authentication, manuel teste ek olarak entegrasyon testleri yazmaya yardımcı olan API'ler de sağlar. telefon kimlik doğrulama testi için. Bu API'ler reCAPTCHA'yı devre dışı bırakarak uygulama doğrulamayı devre dışı bırakır. ve iOS'teki sessiz push bildirimlerinde kullanabilirsiniz. Bu sayede otomasyon testleri yapabilir ve uygulanması daha kolay olur. Ayrıca, anlık görüntü testi veya doğrulama akışı da mevcut.
Web'de appVerificationDisabledForTesting
değerini şuna ayarlayın:
firebase.auth.RecaptchaVerifier
oluşturmadan önce true
. Şu sorunu çözer:
reCAPTCHA otomatik olarak gösterilir, böylece telefon numarasını manuel olarak çözmeden iletebilirsiniz. Not
reCAPTCHA devre dışı bırakılsa bile, hayali olmayan bir telefon numarası kullanılması durumunda
oturum açma işlemini tamamlayın. Bu API ile yalnızca hayali telefon numaraları kullanılabilir.
// Turn off phone auth app verification. firebase.auth().settings.appVerificationDisabledForTesting = true; var phoneNumber = "+16505554567"; var testVerificationCode = "123456"; // This will render a fake reCAPTCHA as appVerificationDisabledForTesting is true. // This will resolve after rendering without app verification. var appVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container'); // signInWithPhoneNumber will call appVerifier.verify() which will resolve with a fake // reCAPTCHA response. firebase.auth().signInWithPhoneNumber(phoneNumber, appVerifier) .then(function (confirmationResult) { // confirmationResult can resolve with the fictional testVerificationCode above. return confirmationResult.confirm(testVerificationCode) }).catch(function (error) { // Error; SMS not sent // ... });
Uygulama doğrulama işlemi doğrulandığında, görünür ve görünmez reCAPTCHA uygulama doğrulayıcıları farklı davranırlar. devre dışı:
- Görünür reCAPTCHA: Görünür reCAPTCHA,
appVerifier.render()
, bir saniyeden daha kısa bir süre sonra kendi kendine çözümlenir Bu, kullanıcının oluşturma işlemini tamamladıktan hemen sonra reCAPTCHA'yı tıklamasıdır. reCAPTCHA yanıtın süresi bir süre sonra dolar ve ardından tekrar otomatik olarak çözülür. - Görünmez reCAPTCHA:
Görünmez reCAPTCHA, oluşturma sırasında otomatik olarak çözümlenmez. Bunun yerine
appVerifier.verify()
çağrı veya reCAPTCHA'nın düğme bağlantısı çok kısa bir gecikmenin ardından tıklanan Benzer şekilde, yanıtın süresi de bir süre sonra dolar sonra yalnızcaappVerifier.verify()
aramasından sonra veya düğme bağlantısı yeniden tıklanır.
Sahte reCAPTCHA çözümlendiğinde, karşılık gelen geri çağırma işlevi beklendiği gibi tetiklenir. yanıt veremiyor. Sona erme süresi geri çağırması da belirtilirse süre dolduğunda tetiklenir.
Sonraki adımlar
Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve bilgileri (kullanıcı adı ve şifre, telefon numarası) Numara veya kimlik doğrulama sağlayıcı bilgileri (oturum açan kullanıcı). Bu yeni Firebase projenizin bir parçası olarak saklanır ve aşağıdaki verileri tanımlamak için kullanılabilir: nasıl oturum açarsa açsın, projenizdeki tüm uygulamalarda kullanılır.
-
Uygulamalarınızda, kullanıcınızın kimlik doğrulama durumunu öğrenmenin önerilen yolu
Auth
nesnesine bir gözlemci ayarlayın. Ardından, kullanıcınınUser
nesnesindeki temel profil bilgilerini içerir. Görüntüleyin Kullanıcıları Yönetme Firebase Realtime Database ve Cloud Storage içinde Güvenlik Kuralları'nı kullanarak şunları yapabilirsiniz:
auth
değişkeninden, oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilirsiniz. ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanılır.
Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcısının kimlik bilgilerini hesaba katılmaz.
Bir kullanıcının oturumunu kapatmak için numaralı telefonu arayın
signOut
:
Web
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
Web
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });