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

Firebase Authentication'ı kullanarak kullanıcının telefonuna SMS mesajı göndererek kullanıcının oturumunu açabilirsiniz. Kullanıcı, SMS mesajında yer alan tek kullanımlık bir kodu kullanarak oturum açar.

Bu belgede, Firebase SDK'sını kullanarak telefon numarası oturum açma akışının nasıl uygulanacağı açıklanmaktadır.

Başlamadan önce

  1. Firebase'i C++ projenize ekleyin.
  2. Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolundan yapın.
  3. Telefon numarasıyla oturum açmak için platform gereksinimlerini anlayın:
    • 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 yapılan kimlik doğrulama işlemi pratik olan diğer yöntemlere göre daha az güvenlidir. Bunun nedeni, telefon numarasına sahip olma durumunun kullanıcılar arasında kolayca aktarılmasıdır. Ayrıca, birden fazla kullanıcı profiline sahip cihazlarda SMS mesajı alabilen tüm kullanıcılar, cihazın telefon numarasını kullanarak bir hesapta oturum açabilir.

Uygulamanızda telefon numarası tabanlı oturum açma özelliğini kullanıyorsanız bu özelliği daha güvenli oturum açma yöntemleriyle birlikte sunmalı ve kullanıcıları telefon numarasıyla oturum açmanın güvenlik açısından olumsuzlukları hakkında bilgilendirmelisiniz.

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 Firebase projenizde Telefon Numarası oturum açma yöntemini etkinleştirmeniz gerekir:

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

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

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 APIN bildirimlerini alabilmesi gerekir. Bir cihazda kullanıcının telefon numarasıyla ilk kez oturum açtığınızda Firebase Authentication, telefon numarası oturum açma isteğinin uygulamanızdan geldiğini doğrulamak için cihaza sessiz bir push bildirimi gönderir. (Bu nedenle, simülatörde telefon numarasıyla oturum açma özelliği kullanılamaz.)

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. Halihazırda bir APNs sertifikanız yoksa Apple Geliştirici Üye Merkezi'nde sertifika oluşturduğunuzdan emin olun.

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

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

    3. Her sertifika için .p12 dosyasını seçin ve varsa şifreyi sağlayın. 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 doğrulama kodu gönderme

Telefon numarasıyla oturum açmayı başlatmak için kullanıcıya telefon numarasını girmesini isteyen bir arayüz sunun. Ardından PhoneAuthProvider::VerifyPhoneNumber numaralı telefonu arayarak Firebase'in kullanıcının telefonuna SMS ile kimlik doğrulama kodu göndermesini isteyin:

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

    Yasal şartlar değişiklik gösterir, ancak en iyi uygulama olarak ve kullanıcılarınızın beklentilerini belirlemek amacıyla, telefonla oturum açmalarını kullandıkları takdirde doğrulama için bir SMS mesajı alabileceklerini ve standart ücretlerin geçerli olacağını bildirmeniz gerekir.

  2. Kullanıcının telefon numarasını vererek PhoneAuthProvider::VerifyPhoneNumber numaralı telefonu arayın.
    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,
    • (iOS'te) uygulamanıza sessiz bir push 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ının oturum açmak için hem doğrulama koduna hem de doğrulama kimliğine ihtiyacınız olacaktır.
  3. Doğrulama kimliğini kaydedin ve uygulamanız yüklendiğinde geri yükleyin. Böylece, uygulamanız kullanıcı oturum açma akışını tamamlamadan önce sonlandırılırsa (örneğin, SMS uygulamasına geçiş yaparken) geçerli bir doğrulama kimliğinizin olduğundan emin olabilirsiniz.

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

VerifyPhoneNumber numaralı telefona yapılan arama, Dinleyicinizde OnCodeSent aranıyorsa, SMS mesajıyla gönderilen kullanıcıdan doğrulama kodunu yazmasını isteyebilirsiniz.

Diğer yandan, VerifyPhoneNumber çağrısı OnVerificationCompleted ile sonuçlanıyorsa otomatik doğrulama başarılı olmuş demektir. Artık aşağıda açıklandığı gibi kullanabileceğiniz bir PhoneAuthCredential kullanabilirsiniz.

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

Kullanıcı SMS mesajındaki doğrulama kodunu uygulamanıza gönderdikten sonra, doğrulama kodu ile doğrulama kimliğinden bir PhoneAuthCredential nesnesi oluşturup bu nesneyi Auth::SignInWithCredential hizmetine ileterek kullanıcının oturum açmasını sağlayın.

  1. Kullanıcıdan doğrulama kodunu alın.
  2. Doğrulama kodundan ve doğrulama kimliğinden bir Credential nesnesi oluşturun.
    PhoneAuthCredential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. Kullanıcının Credential nesnesiyle oturum açmasını sağlayı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

Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgisi) 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 kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda kullanıcının temel profil bilgilerini firebase::auth::User nesnesinden alabilirsiniz:

    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 Güvenlik Kurallarınızda, oturum açan kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.

Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların, birden fazla kimlik doğrulama sağlayıcı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.

Bir kullanıcının oturumunu kapatmak için SignOut() numaralı telefonu arayın:

auth->SignOut();