Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit ecd1c4a

Browse files
committed
Adding support for FirebaseUser.unlink(providerId)
* Unlink an auth provider from a user account
1 parent 7049401 commit ecd1c4a

5 files changed

Lines changed: 58 additions & 0 deletions

File tree

packages/firebase_auth/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## 0.6.3
22

33
* Add multi app support.
4+
* Adding support for FirebaseUser.unlink(providerId)
45

56
## 0.6.2+1
67

packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ public void onMethodCall(MethodCall call, Result result) {
118118
break;
119119
case "linkWithTwitterCredential":
120120
handleLinkWithTwitterCredential(call, result, getAuth(call));
121+
case "unlink":
122+
handleUnlink(call, result, getAuth(call));
121123
break;
122124
case "updateEmail":
123125
handleUpdateEmail(call, result, getAuth(call));
@@ -434,6 +436,15 @@ private void handleSignInWithCustomToken(
434436
.addOnCompleteListener(new SignInCompleteListener(result));
435437
}
436438

439+
private void handleUnlink(MethodCall call, final Result result, FirebaseAuth firebaseAuth) {
440+
Map<String, String> arguments = call.arguments();
441+
String providerId = arguments.get("providerId");
442+
firebaseAuth
443+
.getCurrentUser()
444+
.unlink(providerId)
445+
.addOnCompleteListener(new SignInCompleteListener(result));
446+
}
447+
437448
private void handleSignOut(MethodCall call, final Result result, FirebaseAuth firebaseAuth) {
438449
firebaseAuth.signOut();
439450
result.success(null);

packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,16 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result
199199
completion:^(FIRUser *user, NSError *error) {
200200
[self sendResult:result forUser:user error:error];
201201
}];
202+
[[FIRAuth auth].currentUser linkWithCredential:credential
203+
completion:^(FIRUser *user, NSError *error) {
204+
[self sendResult:result forUser:user error:error];
205+
}];
206+
} else if ([@"unlink" isEqualToString:call.method]) {
207+
NSString *providerId = call.arguments[@"providerId"];
208+
[[FIRAuth auth].currentUser unlinkFromProvider:providerId
209+
completion:^(FIRUser *user, NSError *error) {
210+
[self sendResult:result forUser:user error:error];
211+
}];
202212
} else if ([@"updateEmail" isEqualToString:call.method]) {
203213
NSString *email = call.arguments[@"email"];
204214
[[self getAuth:call.arguments].currentUser updateEmail:email
@@ -212,6 +222,10 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result
212222
completion:^(NSError *error) {
213223
[self sendResult:result forUser:nil error:error];
214224
}];
225+
[[FIRAuth auth].currentUser updatePassword:password
226+
completion:^(NSError *error) {
227+
[self sendResult:result forUser:nil error:error];
228+
}];
215229
} else if ([@"updateProfile" isEqualToString:call.method]) {
216230
FIRUserProfileChangeRequest *changeRequest =
217231
[[self getAuth:call.arguments].currentUser profileChangeRequest];

packages/firebase_auth/lib/firebase_auth.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class FirebaseUserMetadata {
1616
final Map<dynamic, dynamic> _data;
1717

1818
int get creationTimestamp => _data['creationTimestamp'];
19+
1920
int get lastSignInTimestamp => _data['lastSignInTimestamp'];
2021
}
2122

@@ -469,6 +470,19 @@ class FirebaseAuth {
469470
return currentUser;
470471
}
471472

473+
Future<FirebaseUser> unlink({
474+
@required String providerId,
475+
}) async {
476+
final Map<dynamic, dynamic> data = await channel.invokeMethod(
477+
'unlink',
478+
<String, String>{
479+
'providerId': providerId,
480+
},
481+
);
482+
final FirebaseUser currentUser = FirebaseUser._(data, app);
483+
return currentUser;
484+
}
485+
472486
/// Sets the user-facing language code for auth operations that can be
473487
/// internationalized, such as [sendEmailVerification]. This language
474488
/// code should follow the conventions defined by the IETF in BCP47.

packages/firebase_auth/test/firebase_auth_test.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,24 @@ void main() {
287287
);
288288
});
289289

290+
test('unlink', () async {
291+
final FirebaseUser user = await auth.unlink(
292+
providerId: kMockProviderId,
293+
);
294+
verifyUser(user);
295+
expect(
296+
log,
297+
<Matcher>[
298+
isMethodCall(
299+
'unlink',
300+
arguments: <String, String>{
301+
'providerId': kMockProviderId,
302+
},
303+
),
304+
],
305+
);
306+
});
307+
290308
test('signInWithFacebook', () async {
291309
final FirebaseUser user = await auth.signInWithFacebook(
292310
accessToken: kMockAccessToken,

0 commit comments

Comments
 (0)