Catch up on everything we announced at this year's Firebase Summit. Learn more

Bir Telefon Numarası ve C++ kullanarak Firebase ile kimlik doğrulaması yapın

Bir kullanıcının telefonuna SMS mesajı göndererek oturum açmak için Firebase Authentication'ı kullanabilirsiniz. Kullanıcı, SMS mesajında ​​bulunan bir kerelik kodu kullanarak oturum açar.

Bu belge, Firebase SDK kullanılarak bir telefon numarası oturum açma akışının nasıl uygulanacağını açıklar.

Sen başlamadan önce

  1. C ++ projeye Firebase ekleyin .
  2. Henüz Firebase projesine uygulamanızı bağlı değil varsa, gelen bunu Firebase konsoluna .

Apple platformlarında, telefon numarasıyla oturum açmanın fiziksel bir cihaz gerektirdiğini ve bir simülatörde çalışmayacağını unutmayın.

Güvenlik endişeleri

Yalnızca bir telefon numarası kullanarak kimlik doğrulama, uygun olmakla birlikte, mevcut diğer yöntemlerden daha az güvenlidir, çünkü bir telefon numarasına sahip olmak kullanıcılar arasında kolayca aktarılabilir. Ayrıca, birden fazla kullanıcı profiline sahip cihazlarda, SMS mesajı alabilen herhangi bir kullanıcı, cihazın telefon numarasını kullanarak bir hesapta oturum açabilir.

Uygulamanızda telefon numarası tabanlı oturum açmayı kullanıyorsanız, bunu daha güvenli oturum açma yöntemleriyle birlikte sunmalı ve kullanıcıları telefon numarasıyla oturum açmanın güvenlik değiş tokuşları hakkında bilgilendirmelisiniz.

Firebase projeniz için Telefon Numarası ile oturum açmayı etkinleştirin

Kullanıcılarda SMS ile oturum açmak için önce Firebase projeniz için Telefon Numarası ile oturum açma yöntemini etkinleştirmelisiniz:

  1. In Firebase konsoluna , Kimlik Doğrulama bölümünü açın.
  2. Yöntem Oturum Açma sayfasında, Telefon Numarası oturum açma yöntemine sağlar.

Firebase'in telefon numarası oturum açma isteği kotası, çoğu uygulamanın etkilenmeyeceği kadar yüksektir. Ancak, telefonla kimlik doğrulama ile çok yüksek sayıda kullanıcı oturum açmanız gerekiyorsa, fiyatlandırma planınızı yükseltmeniz gerekebilir. Bkz fiyatlandırma sayfasını.

APN bildirimlerini almaya başlayın (Apple platformları)

Apple platformlarında telefon numarası kimlik doğrulamasını kullanmak için uygulamanızın Firebase'den APN bildirimleri alabilmesi gerekir. Bir cihazda telefon numarasıyla ilk kez bir kullanıcı oturum açtığınızda, Firebase Kimlik Doğrulama, telefon numarası oturum açma isteğinin uygulamanızdan geldiğini doğrulamak için cihaza sessiz bir anında iletme bildirimi gönderir. (Bu nedenle, bir simülatörde telefon numarası ile giriş yapılamaz.)

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

  1. Xcode olarak, push bildirimleri etkinleştirmek projeniz için.
  2. APNs sertifikanızı Firebase'e yükleyin. Zaten bir APN'ler sertifikası yoksa, içinde oluşturmak için emin olun Elma Geliştirici Üye Merkezi .

    1. Firebase konsolunda proje içinde, dişli çark simgesini seçmek Proje Ayarları seçip Bulut Mesajlaşma sekmesini seçin.

    2. Geliştirme sertifikası, üretim sertifikası veya her ikisi için Yükle Belgesi düğmesini seçin. En az biri gereklidir.

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

Kullanıcının telefonuna bir doğrulama kodu gönderin

Sonra telefon numarasını istemleri onların telefon numarasını temin etmek olduğunu kullanıcıya bir arayüz sunmak, oturum açma başlatmak ve için çağrı PhoneAuthProvider::VerifyPhoneNumber Firebase SMS ile kullanıcının telefonuna bir kimlik doğrulama kodu göndermek olduğunu isteğine:

  1. Kullanıcının telefon numarasını alın.

    Yasal gereksinimler değişiklik gösterir, ancak en iyi uygulama olarak ve kullanıcılarınızın beklentilerini belirlemek için, telefonla oturum açmayı kullanırlarsa doğrulama için bir SMS mesajı alabileceklerini ve standart ücretlerin geçerli olduğunu onlara bildirmelisiniz.

  2. Çağrı PhoneAuthProvider::VerifyPhoneNumber buna kullanıcının telefon numarasını geçirerek,.
    class PhoneListener : public PhoneAuthProvider::Listener {
     public:
      ~PhoneListener() override {}
    
      void OnVerificationCompleted(Credential 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;
    PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth);
    phone_provider->VerifyPhoneNumber(phone_number, kAutoVerifyTimeOut, null,
                                      &phone_listener);
    
    Aradığınızda PhoneAuthProvider::VerifyPhoneNumber Firebase,
    • (iOS'ta) uygulamanıza sessiz bir anında iletme bildirimi gönderir,
    • belirtilen telefon numarasına kimlik doğrulama kodu içeren bir SMS mesajı gönderir ve tamamlama işlevinize bir doğrulama kimliği iletir. Kullanıcıda oturum açmak için hem doğrulama koduna hem de doğrulama kimliğine ihtiyacınız olacak.
  3. Doğrulama kimliğini kaydedin ve uygulamanız yüklendiğinde geri yükleyin. Bunu yaparak, kullanıcı oturum açma akışını tamamlamadan önce uygulamanız sonlandırılırsa (örneğin, SMS uygulamasına geçiş yaparken) geçerli bir doğrulama kimliğiniz olduğundan emin olabilirsiniz.

    Doğrulama kimliğini istediğiniz şekilde sürdürebilirsiniz. Platformlar arası bir C++ çerçevesi ile yazıyorsanız, uygulamanın sonlandırılması ve geri yüklenmesi için bildirimler sağlamalıdır. Bu olaylarda, sırasıyla doğrulama kimliğini kaydedebilir ve geri yükleyebilirsiniz.

Çağrısı Eğer VerifyPhoneNumber sonuçları OnCodeSent sizin İşleyici çağrıldığı, onlar SMS mesajında aldığınızda doğrulama kodunu yazmak için kullanıcıdan.

Çağrısı Öte yandan, VerifyPhoneNumber sonuçları OnVerificationCompleted , otomatik doğrulama başarılı ve sizi artık sahip olacak Credential aşağıda açıklandığı gibi kullanabilirsiniz hangi ile.

Kullanıcıda doğrulama koduyla oturum açın

Kullanıcısı SMS mesajından doğrulama kodu ile uygulamanızı sağladıktan sonra, bir oluşturarak kullanıcıyı oturum Credential doğrulama kodu ve doğrulama kimliğinden nesne ve bu nesneyi geçirmeden Auth::SignInWithCredential .

  1. Kullanıcıdan doğrulama kodunu alın.
  2. Bir oluşturma Credential doğrulama kodu ve doğrulama numarası nesne.
    Credential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. İle kullanıcı giriş Credential nesne:
    Future<User*> future = auth_->SignInWithCredential(credential);
    future.OnCompletion(
        [](const Future<User*>& result, void*) {
          if (result.error() == kAuthErrorNone) {
            // Successful.
            // User is signed in.
            const 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

Bir kullanıcı ilk kez oturum açtıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve oturum açtığı kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcısı bilgileri gibi kimlik bilgilerine bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığından bağımsız olarak projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.

  • Senin uygulamalarda, gelen kullanıcının temel profil bilgileri alabilirsiniz firebase::auth::User nesnesi:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      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();
    }
    
  • Senin Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama yılında Güvenlik Kuralları , alabilirsiniz, kullanıcının benzersiz bir kullanıcı kimliği imzalı auth değişkeni ve hangi verilerin kullanıcı teneke erişimi kontrol etmek için kullanabilirsiniz.

Kullanıcıların birden çok kimlik doğrulama sağlayıcıları kullanarak uygulamada oturum izin verebilir mevcut bir kullanıcı hesabına auth sağlayıcı kimlik bilgilerini birbirine bağlayan.

Bir kullanıcı Oturumu kapatmak için çağrı SignOut() :

auth->SignOut();