Telefon Numarası ve C++ kullanarak Firebase ile kimlik doğrulama

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ı.

Bu dokümanda, Firebase SDK'sı.

Başlamadan önce

  1. Firebase'i C++ kullanıcılarınıza ekleyin inceleyebilirsiniz.
  2. Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolunu kullanın.
  3. Telefon numarasıyla oturum açmak için platform gereksinimlerini anlama:
    • Telefon numarasıyla oturum açma özelliği yalnızca mobil platformlara yöneliktir.
    • iOS'te telefon numarasıyla oturum açmak için fiziksel bir cihaz gerekir ve simülatörde kullanılamaz.

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:

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın.
  2. Oturum Açma Yöntemi sayfasında Telefon Numarası'nı etkinleştirin oturum açma yöntemini kullanabilirsiniz.

Firebase'in telefon numarası oturum açma isteği kotası, çoğu uygulamanın etkilenmez. Ancak, çok sayıda kullanıcıyla oturum açmanız gerekiyorsa Telefonla kimlik doğrulama için fiyatlandırma planınızı yükseltmeniz gerekebilir. Görüntüleyin fiyatlandırma sayfası.

APNs bildirimleri almaya başlayın (Apple platformları)

Apple platformlarında telefon numarası kimlik doğrulamasını kullanmak için uygulamanızın Firebase'den APNs bildirimleri. Bir kullanıcının telefonuyla oturum açtığınızda kullandığında, Firebase Authentication bu bildirime sessiz bir push işlemi gönderir. telefona gönderilen bir bildirimle, telefon numarasıyla oturum açma isteğinin uygulamanızdan gelir. (Bu nedenle, telefonla oturum açma özelliği kullanılamaz. simülatörde kontrol edin.)

Firebase Authentication ile kullanmak üzere APNs bildirimlerini etkinleştirmek için:

  1. Xcode'da, projeniz için push bildirimlerini etkinleştirin.
  2. APNs sertifikanızı Firebase'e yükleyin. Henüz bir APNs sertifikanız yoksa Apple Geliştirici Üye Merkezi.

    1. Firebase konsolunda projenizin içinde, dişli simgesi, seçin Proje Ayarları'nı tıklayın ve ardından Cloud Messaging sekmesi.

    2. Sertifika Yükle'yi seçin. sertifikanız için düğme, üretim sertifikası ya da her ikisi de olmalıdır. En az biri gereklidir.

    3. Her sertifika için .p12 dosyasını seçin ve parolayı girin. Bu sertifikanın paket kimliğinden emin olun uygulamanızın paket kimliğiyle eşleştiğinden emin olun. Seç Kaydet'i seçin.

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 PhoneAuthProvider::VerifyPhoneNumber kullanıcının telefonuna SMS ile gönderilen kimlik doğrulama kodu:

  1. 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.

  2. PhoneAuthProvider::VerifyPhoneNumber öğesini çağırarak kullanıcının hesabına telefon numarası.
    class PhoneListener : public PhoneAuthProvider::Listener {
     public:
      ~PhoneListener() override {}
    
      void OnVerificationCompleted(PhoneAuthCredential credential) override {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // No need for the user to input the verification code manually.
        // `credential` can be used instead of calling GetCredential().
      }
    
      void OnVerificationFailed(const std::string& error) override {
        // Verification code not sent.
      }
    
      void OnCodeSent(const std::string& verification_id,
                      const PhoneAuthProvider::ForceResendingToken&
                          force_resending_token) override {
        // Verification code successfully sent via SMS.
        // Show the Screen to enter the Code.
        // Developer may want to save that verification_id along with other app states in case
        // the app is terminated before the user gets the SMS verification code.
      }
    };
    
    PhoneListener phone_listener;
    PhoneAuhtOptions options;
    options.timeout_milliseconds = kAutoVerifyTimeOut;
    options.phone_number = phone_number;
    PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth);
    phone_provider->VerifyPhoneNumber(options, &phone_listener);
    
    . PhoneAuthProvider::VerifyPhoneNumber, Firebase'i çağırdığınızda
    • (iOS'te) uygulamanıza sessiz bir push bildirimi gönderir.
    • belirtilen numaraya bir kimlik doğrulama kodu içeren SMS mesajı gönderir ve tamamlama fonksiyonunuza bir doğrulama kimliği iletir. Şu işlem için hem doğrulama koduna hem de doğrulama kimliğine ihtiyacınız olacaktır: kullanıcının oturum açmasını sağlayın.
  3. Doğrulama kimliğini kaydedin ve uygulamanız yüklendiğinde geri yükleyin. Böylece, Uygulamanız için hâlâ geçerli bir doğrulama kimliğinizin olduğundan kullanıcı oturum açma akışını tamamlamadan önce sonlandırıldığında (ör. (SMS uygulamasına geçin).

    Doğrulama kimliğini istediğiniz şekilde saklayabilirsiniz. Yazıyorsanız platformlar arası C++ çerçevesi ile birlikte kullanıldığında uygulamanız fesih ve geri yükleme. Bu etkinlikleri kaydedebilir, sırasıyla doğrulama kimliği.

VerifyPhoneNumber için yapılan çağrı OnCodeSent ile sonuçlanırsa dinleyicinizde çağrıldığında, kullanıcıdan doğrulamayı Kısa mesaj ile aldıklarında bu kodla karşılaşırlar.

Diğer yandan, VerifyPhoneNumber çağrısının OnVerificationCompleted, ardından otomatik doğrulama başarıyla tamamlandı ve artık açıklandığı gibi kullanabileceğiniz bir PhoneAuthCredential olur bölümüne göz atın.

Doğrulama koduyla kullanıcının oturumunu açma

Kullanıcı, uygulamanıza SMS ile gönderilen doğrulama kodunu sağladıktan sonra bir PhoneAuthCredential mesajı oluşturarak kullanıcının oturum açmasını sağlayın nesnesini dahil edip bu nesneyi iletmeden önce Hedef: Auth::SignInWithCredential.

  1. Kullanıcıdan doğrulama kodunu alın.
  2. Doğrulama kodundan bir Credential nesnesi oluşturun ve doğrulama kimliği.
    PhoneAuthCredential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. Credential nesnesiyle kullanıcının oturumunu açın:
    Future<User> future = auth_->SignInWithCredential(credential);
    future.OnCompletion(
        [](const Future<User*>& result, void*) {
          if (result.error() == kAuthErrorNone) {
            // Successful.
            // User is signed in.
            User user = *result.result();
    
            // This should display the phone number.
            printf("Phone number: %s", user.phone_number().c_str());
    
            // The phone number provider UID is the phone number itself.
            printf("Phone provider uid: %s", user.uid().c_str());
    
            // The phone number providerID is 'phone'
            printf("Phone provider ID: %s", user.provider_id().c_str());
          } else {
            // Error.
            printf("Sign in error: %s", result.error_message().c_str());
          }
        },
        nullptr);
    

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ıların temel profil bilgilerini şuradan alabilirsiniz: firebase::auth::User nesne:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      std::string name = user.display_name();
      std::string email = user.email();
      std::string photo_url = user.photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user.uid();
    }
    
  • Firebase Realtime Database ve Cloud Storage'ınızda 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():

auth->SignOut();