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

Commit 5ada715

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

File tree

5 files changed

+61
-0
lines changed

5 files changed

+61
-0
lines changed

packages/firebase_auth/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.6.3
2+
3+
* Adding support for FirebaseUser.unlink(providerId)
4+
15
## 0.6.2+1
26

37
* Bump Android dependencies to latest.

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

@@ -465,6 +466,19 @@ class FirebaseAuth {
465466
return currentUser;
466467
}
467468

469+
Future<FirebaseUser> unlink({
470+
@required String providerId,
471+
}) async {
472+
final Map<dynamic, dynamic> data = await channel.invokeMethod(
473+
'unlink',
474+
<String, String>{
475+
'providerId': providerId,
476+
},
477+
);
478+
final FirebaseUser currentUser = FirebaseUser._(data, app);
479+
return currentUser;
480+
}
481+
468482
/// Sets the user-facing language code for auth operations that can be
469483
/// internationalized, such as [sendEmailVerification]. This language
470484
/// 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)