firebase::auth::PhoneAuthProvider

#include <credential.h>

Use phone number text messages to authenticate.

Summary

Allows developers to use the phone number and SMS verification codes to authenticate a user on a mobile device.

This class is not supported on tvOS and Desktop platforms.

The verification flow results in aCredential that can be used to,

  • Sign in to an existing phone number account/sign up with a new phone number
  • Link a phone number to a current user. This provider will be added to the user.
  • Update a phone number on an existing user.
  • Re-authenticate an existing user. This may be needed when a sensitive operation requires the user to be recently logged in.

Possible verification flows: (1)User manually enters verification code.

(2) SMS is automatically retrieved (Android only).

(3) Phone number is instantly verified (Android only).

All three flows can be handled with the example code below. The flow is complete when PhoneVerifier::credential() returns non-NULL.

classPhoneVerifier:publicPhoneAuthProvider::Listener{public:PhoneVerifier(constchar*phone_number,PhoneAuthProvider*phone_auth_provider):display_message_("Sending SMS with verification code"),display_verification_code_input_box_(false),display_resend_sms_button_(false),phone_auth_provider_(phone_auth_provider),phone_number_(phone_number){SendSms();}~PhoneVerifier()override{}voidOnVerificationCompleted(Credentialcredential)override{// Grab `mutex_` for the scope of `lock`. Callbacks can be called on// other threads, so this mutex ensures data access is atomic.MutexLocklock(mutex_);credential_=credential;}voidOnVerificationFailed(conststd::string&error)override{MutexLocklock(mutex_);display_message_="Verification failed with error: "+error;}voidOnCodeSent(conststd::string&verification_id,constPhoneAuthProvider::ForceResendingToken&force_resending_token)override{MutexLocklock(mutex_);verification_id_=verification_id;force_resending_token_=force_resending_token;display_verification_code_input_box_=true;display_message_="Waiting for SMS";}voidOnCodeAutoRetrievalTimeOut(conststd::string&verification_id)override{MutexLocklock(mutex_);display_resend_sms_button_=true;}// Draw the verification GUI on screen and process input events.voidDraw(){MutexLocklock(mutex_);// Draw an informative message describing what's currently happening.ShowTextBox(display_message_.c_str());// Once the time out expires, display a button to resend the SMS.// If the button is pressed, call VerifyPhoneNumber again using the// force_resending_token_.if(display_resend_sms_button_&&!verification_id_.empty()){constboolresend_sms=ShowTextButton("Resend SMS");if(resend_sms){SendSms();}}// Once the SMS has been sent, allow the user to enter the SMS// verification code into a text box. When the user has completed// entering it, call GetCredential() to complete the flow.if(display_verification_code_input_box_){conststd::stringverification_code=ShowInputBox("Verification code");if(!verification_code.empty()){credential_=phone_auth_provider_->GetCredential(verification_id_.c_str(),verification_code.c_str());}}}// The phone number verification flow is complete when this returns// non-NULL.Credential*credential(){MutexLocklock(mutex_);returncredential_.is_valid()?&credential_:nullptr;}private:voidSendSms(){staticconstuint32_tkAutoVerifyTimeOut=2000;MutexLocklock(mutex_);phone_auth_provider_->VerifyPhoneNumber(phone_number_.c_str(),kAutoVerifyTimeOut,&force_resending_token_,this);display_resend_sms_button_=false;}// GUI-related variables.std::stringdisplay_message_;booldisplay_verification_code_input_box_;booldisplay_resend_sms_button_;// Phone flow related variables.PhoneAuthProvider*phone_auth_provider_;std::stringphone_number_;std::stringverification_id_;PhoneAuthProvider::ForceResendingTokenforce_resending_token_;Credentialcredential_;// Callbacks can be called on other threads, so guard them with a mutex.Mutexmutex_;};

Public static attributes

kProviderId
const char *const
The string used to identify this provider.

Public functions

GetCredential(const char *verification_id, const char *verification_code)
Generate a credential for the given phone number.
VerifyPhoneNumber(constPhoneAuthOptions & options,PhoneAuthProvider::Listener *listener)
void
Start the phone number authentication operation.

Public static functions

GetInstance(Auth *auth)
Return thePhoneAuthProvider for the specifiedauth.

Classes

firebase::auth::PhoneAuthProvider::ForceResendingToken

Token to maintain current phone number verification session.

firebase::auth::PhoneAuthProvider::Listener

Receive callbacks fromVerifyPhoneNumber events.

Public static attributes

kProviderId

constchar*constkProviderId

The string used to identify this provider.

Public functions

GetCredential

PhoneAuthCredentialGetCredential(constchar*verification_id,constchar*verification_code)

Generate a credential for the given phone number.

Details
Parameters
verification_id
The id returned when sending the verification code. Sent to the caller viaListener::OnCodeSent.
verification_code
The verification code supplied by the user, most likely by a GUI where the user manually enters the code received in the SMS sent byVerifyPhoneNumber.
Returns

VerifyPhoneNumber

voidVerifyPhoneNumber(constPhoneAuthOptions&options,PhoneAuthProvider::Listener*listener)

Start the phone number authentication operation.

Details
Parameters
options
ThePhoneAuthOptions struct with a verification configuration.
listener
Class that receives notification whenever an SMS verification event occurs.

Public static functions

GetInstance

PhoneAuthProvider&GetInstance(Auth*auth)

Return thePhoneAuthProvider for the specifiedauth.

Details
Parameters
auth
TheAuth session for which we want to get aPhoneAuthProvider.

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2024-05-07 UTC.