reauthenticateWithPassword method
Future<Either<AuthServiceSignInFailure, Unit> >
reauthenticateWithPassword(
- String password
override
Re-authenticate current user with password for sensitive operations
Required before operations like changing email, password, or deleting account
Implementation
@override
Future<Either<AuthServiceSignInFailure, Unit>> reauthenticateWithPassword(
String password,
) async {
try {
final user = _fbAuth.currentUser;
if (user == null) {
logw('reauthenticateWithPassword: No user logged in');
return left(AuthServiceSignInFailure.userNotFound);
}
final email = user.email;
if (email == null) {
logw('reauthenticateWithPassword: User has no email');
return left(AuthServiceSignInFailure.invalidEmail);
}
logd('reauthenticateWithPassword: Re-authenticating user');
// Create credential and re-authenticate
final credential = fb_auth.EmailAuthProvider.credential(
email: email,
password: password,
);
await user.reauthenticateWithCredential(credential);
logd('reauthenticateWithPassword: Re-authentication successful');
return right(unit);
} on fb_auth.FirebaseAuthException catch (e) {
loge(e, 'reauthenticateWithPassword failed');
switch (e.code) {
case 'wrong-password':
return left(AuthServiceSignInFailure.wrongPassword);
case 'invalid-credential':
return left(AuthServiceSignInFailure.invalidCredential);
case 'user-disabled':
return left(AuthServiceSignInFailure.userDisabled);
case 'too-many-requests':
return left(AuthServiceSignInFailure.tooManyRequests);
default:
return left(AuthServiceSignInFailure.unexpected);
}
} catch (e) {
loge(e, 'reauthenticateWithPassword failed');
return left(AuthServiceSignInFailure.unexpected);
}
}