googlearchive / firebase-dart

Dart wrapper for Firebase
https://pub.dev/packages/firebase
404 stars 144 forks source link

auth/user-token-expired thrown by getIdToken #407

Open winqoo opened 2 years ago

winqoo commented 2 years ago

I have a refresh method in my code that calls firebaseUser?.getIdToken();. The problem start to happen when user is in the app for approx 1h. the code throws auth/user-token-expired error and the user is force to logout.

Future<String?> _refreshToken() async {
    var firebaseUser = await firebaseAuth.currentUser;
    _tokenCreationDate = DateTime.now();
    try {
      _token = await firebaseUser?.getIdToken(true);
      return _token;
    } on PlatformException catch (e) {
      if (e.code == 'ERROR_USER_TOKEN_EXPIRED') {
        await errorTracking.captureException(
            exception: e,
            stackTrace:
                'firebase _refreshToken PlatformException ERROR_USER_TOKEN_EXPIRED');
        await signOut();
        throw TokenExpiredError(e);
      }
    } catch (e) {
      logger.e(e);
    }
    return null;
  }

it goes straight to the catch. From the documentation I know that:

Firebase ID tokens are short lived and last for an hour; the refresh token can be used to retrieve new ID tokens. Refresh tokens expire only when one of the following occurs: The user is deleted. The user is disabled. Which is not the case here. Is there any other reason why the method throws exception?