AccessToken constructor

AccessToken(
  1. String token, {
  2. Duration invalidthreshold = const Duration(seconds: 30),
})

Implementation

AccessToken(
  this.token, {
  this.invalidthreshold = const Duration(seconds: 30),
}) {
  final splitToken = token.split(".");
  if (splitToken.length != 3) {
    throw FormatException('Invalid token');
  }
  try {
    // Payload is always the index 1
    final payloadBase64 = splitToken[1];
    // Base64 should be multiple of 4. Normalize the payload before decode it
    final normalizedPayload = base64.normalize(payloadBase64);
    // Decode payload, the result is a String
    final payloadString = utf8.decode(base64.decode(normalizedPayload));
    // Parse the String to a Map<String, dynamic>
    final decodedPayload = jsonDecode(payloadString);

    // expiration date
    final expTimestamp = decodedPayload["exp"] as int;
    expirationDate = DateTime.fromMillisecondsSinceEpoch(expTimestamp * 1000);
  } catch (error) {
    throw FormatException('Invalid token payload ($error)');
  }
}