[auth][android] Cache auto-verified credential for use on the native side
This commit is contained in:
parent
44278f59cc
commit
f467e2d904
|
@ -55,6 +55,7 @@ import io.invertase.firebase.Utils;
|
||||||
class RNFirebaseAuth extends ReactContextBaseJavaModule {
|
class RNFirebaseAuth extends ReactContextBaseJavaModule {
|
||||||
private static final String TAG = "RNFirebaseAuth";
|
private static final String TAG = "RNFirebaseAuth";
|
||||||
private String mVerificationId;
|
private String mVerificationId;
|
||||||
|
private PhoneAuthCredential mCredential;
|
||||||
private ReactContext mReactContext;
|
private ReactContext mReactContext;
|
||||||
private HashMap<String, FirebaseAuth.AuthStateListener> mAuthListeners = new HashMap<>();
|
private HashMap<String, FirebaseAuth.AuthStateListener> mAuthListeners = new HashMap<>();
|
||||||
private HashMap<String, FirebaseAuth.IdTokenListener> mIdTokenListeners = new HashMap<>();
|
private HashMap<String, FirebaseAuth.IdTokenListener> mIdTokenListeners = new HashMap<>();
|
||||||
|
@ -739,10 +740,16 @@ class RNFirebaseAuth extends ReactContextBaseJavaModule {
|
||||||
|
|
||||||
Log.d(TAG, "verifyPhoneNumber:" + phoneNumber);
|
Log.d(TAG, "verifyPhoneNumber:" + phoneNumber);
|
||||||
|
|
||||||
|
// Reset the credential
|
||||||
|
mCredential = null;
|
||||||
|
|
||||||
PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
|
PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onVerificationCompleted(final PhoneAuthCredential phoneAuthCredential) {
|
public void onVerificationCompleted(final PhoneAuthCredential phoneAuthCredential) {
|
||||||
|
// Cache the credential to protect against null verificationId
|
||||||
|
mCredential = phoneAuthCredential;
|
||||||
|
|
||||||
Log.d(TAG, "verifyPhoneNumber:verification:onVerificationCompleted");
|
Log.d(TAG, "verifyPhoneNumber:verification:onVerificationCompleted");
|
||||||
WritableMap state = Arguments.createMap();
|
WritableMap state = Arguments.createMap();
|
||||||
|
|
||||||
|
@ -1069,6 +1076,15 @@ class RNFirebaseAuth extends ReactContextBaseJavaModule {
|
||||||
case "github.com":
|
case "github.com":
|
||||||
return GithubAuthProvider.getCredential(authToken);
|
return GithubAuthProvider.getCredential(authToken);
|
||||||
case "phone":
|
case "phone":
|
||||||
|
// If the phone number is auto-verified quickly, then the verificationId can be null
|
||||||
|
// We cached the credential as part of the verifyPhoneNumber request to be re-used here
|
||||||
|
// if possible
|
||||||
|
if (authToken == null && mCredential != null) {
|
||||||
|
PhoneAuthCredential credential = mCredential;
|
||||||
|
// Reset the cached credential
|
||||||
|
mCredential = null;
|
||||||
|
return credential;
|
||||||
|
}
|
||||||
return PhoneAuthProvider.getCredential(authToken, authSecret);
|
return PhoneAuthProvider.getCredential(authToken, authSecret);
|
||||||
case "password":
|
case "password":
|
||||||
return EmailAuthProvider.getCredential(authToken, authSecret);
|
return EmailAuthProvider.getCredential(authToken, authSecret);
|
||||||
|
|
Loading…
Reference in New Issue