Skip to content

Commit

Permalink
fix(auth, android): getIdToken() IllegalStateException crash fix (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
russellwheatley committed Jul 25, 2023
1 parent b95c380 commit e925b4c
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 23 deletions.
Expand Up @@ -6,10 +6,13 @@

package io.flutter.plugins.firebase.auth;

import static io.flutter.plugins.firebase.core.FlutterFirebasePlugin.cachedThreadPool;

import android.app.Activity;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.FirebaseApp;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.FirebaseAuth;
Expand Down Expand Up @@ -72,27 +75,21 @@ public void getIdToken(
@NonNull
GeneratedAndroidFirebaseAuth.Result<GeneratedAndroidFirebaseAuth.PigeonIdTokenResult>
result) {
FirebaseUser firebaseUser = getCurrentUserFromPigeon(app);

if (firebaseUser == null) {
result.error(FlutterFirebaseAuthPluginException.noUser());
return;
}

GetTokenResult tokenResult =
firebaseUser
.getIdToken(forceRefresh)
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
result.success(PigeonParser.parseTokenResult(task.getResult()));
} else {
result.error(
FlutterFirebaseAuthPluginException.parserExceptionToFlutter(
task.getException()));
}
})
.getResult();
cachedThreadPool.execute(
() -> {
FirebaseUser firebaseUser = getCurrentUserFromPigeon(app);

if (firebaseUser == null) {
result.error(FlutterFirebaseAuthPluginException.noUser());
return;
}
try {
GetTokenResult response = Tasks.await(firebaseUser.getIdToken(forceRefresh));
result.success(PigeonParser.parseTokenResult(response));
} catch (Exception exception) {
result.error(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception));
}
});
}

@Override
Expand Down
Expand Up @@ -6,7 +6,7 @@ buildscript {
}

dependencies {
classpath 'com.android.tools.build:gradle:8.0.1'
classpath 'com.android.tools.build:gradle:8.0.2'
classpath 'com.google.gms:google-services:4.3.15'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
Expand All @@ -27,6 +27,6 @@ subprojects {
project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
Expand Up @@ -39,6 +39,34 @@ void main() {
expect(token?.length, greaterThan(24));
});

test('should return a token using `getIdToken()` after sign in', () async {
// Demonstrate fix for this issue works: https://github.com/firebase/flutterfire/issues/11297
String email = generateRandomEmail();

final userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email,
password: testPassword,
);

String? token = await userCredential.user!.getIdToken(true);

expect(token?.length, greaterThan(24));
});

test('should return a token using `getIdTokenResult()` after sign in', () async {
// Demonstrate fix for this issue works: https://github.com/firebase/flutterfire/issues/11297
String email = generateRandomEmail();

final userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email,
password: testPassword,
);

IdTokenResult result = await userCredential.user!.getIdTokenResult(true);

expect(result.token?.length, greaterThan(24));
});

test('should catch error', () async {
// Setup
late User user;
Expand Down

0 comments on commit e925b4c

Please sign in to comment.