Skip to content

Commit 85340ba

Browse files
authored
Handle user backing out of social flows (#1764)
1 parent d276b8e commit 85340ba

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.firebase.ui.auth.IdpResponse;
2121
import com.firebase.ui.auth.data.model.Resource;
2222
import com.firebase.ui.auth.data.model.User;
23+
import com.firebase.ui.auth.data.model.UserCancellationException;
2324
import com.firebase.ui.auth.ui.HelperActivityBase;
2425
import com.firebase.ui.auth.util.ExtraConstants;
2526
import com.firebase.ui.auth.viewmodel.ProviderSignInBase;
@@ -111,7 +112,7 @@ public void onSuccess(LoginResult result) {
111112

112113
@Override
113114
public void onCancel() {
114-
onError(new FacebookException());
115+
setResult(Resource.<IdpResponse>forFailure(new UserCancellationException()));
115116
}
116117

117118
@Override

auth/src/main/java/com/firebase/ui/auth/data/remote/GenericIdpSignInHandler.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.firebase.ui.auth.data.model.UserCancellationException;
2323
import com.firebase.ui.auth.ui.HelperActivityBase;
2424
import com.firebase.ui.auth.util.ExtraConstants;
25+
import com.firebase.ui.auth.util.FirebaseAuthError;
2526
import com.firebase.ui.auth.util.data.AuthOperationManager;
2627
import com.firebase.ui.auth.util.data.ProviderUtils;
2728
import com.firebase.ui.auth.viewmodel.ProviderSignInBase;
@@ -32,6 +33,7 @@
3233
import com.google.firebase.auth.AuthCredential;
3334
import com.google.firebase.auth.AuthResult;
3435
import com.google.firebase.auth.FirebaseAuth;
36+
import com.google.firebase.auth.FirebaseAuthException;
3537
import com.google.firebase.auth.FirebaseAuthUserCollisionException;
3638
import com.google.firebase.auth.FirebaseUser;
3739
import com.google.firebase.auth.OAuthCredential;
@@ -91,17 +93,27 @@ public void onSuccess(@NonNull AuthResult authResult) {
9193
new OnFailureListener() {
9294
@Override
9395
public void onFailure(@NonNull Exception e) {
94-
if (e instanceof FirebaseAuthUserCollisionException) {
95-
FirebaseAuthUserCollisionException collisionException =
96-
(FirebaseAuthUserCollisionException) e;
97-
98-
setResult(Resource.<IdpResponse>forFailure(
99-
new FirebaseUiUserCollisionException(
100-
ErrorCodes.ERROR_GENERIC_IDP_RECOVERABLE_ERROR,
101-
"Recoverable error.",
102-
provider.getProviderId(),
103-
collisionException.getEmail(),
104-
collisionException.getUpdatedCredential())));
96+
if (e instanceof FirebaseAuthException) {
97+
FirebaseAuthError error =
98+
FirebaseAuthError.fromException((FirebaseAuthException) e);
99+
100+
if (e instanceof FirebaseAuthUserCollisionException) {
101+
FirebaseAuthUserCollisionException collisionException =
102+
(FirebaseAuthUserCollisionException) e;
103+
104+
setResult(Resource.<IdpResponse>forFailure(
105+
new FirebaseUiUserCollisionException(
106+
ErrorCodes.ERROR_GENERIC_IDP_RECOVERABLE_ERROR,
107+
"Recoverable error.",
108+
provider.getProviderId(),
109+
collisionException.getEmail(),
110+
collisionException.getUpdatedCredential())));
111+
} else if (error == FirebaseAuthError.ERROR_WEB_CONTEXT_CANCELED) {
112+
setResult(Resource.<IdpResponse>forFailure(
113+
new UserCancellationException()));
114+
} else {
115+
setResult(Resource.<IdpResponse>forFailure(e));
116+
}
105117
} else {
106118
setResult(Resource.<IdpResponse>forFailure(e));
107119
}

auth/src/main/java/com/firebase/ui/auth/util/FirebaseAuthError.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.firebase.auth.FirebaseAuthException;
44

5+
import androidx.annotation.NonNull;
56
import androidx.annotation.RestrictTo;
67

78
/**
@@ -83,6 +84,8 @@ public enum FirebaseAuthError {
8384

8485
ERROR_API_NOT_AVAILABLE("The API that you are calling is not available on devices without Google Play Services."),
8586

87+
ERROR_WEB_CONTEXT_CANCELED("The web operation was canceled by the user"),
88+
8689
ERROR_UNKNOWN("An unknown error occurred.");
8790

8891
/**

0 commit comments

Comments
 (0)