Skip to content

Commit

Permalink
Encode timestamps as float instead of string values
Browse files Browse the repository at this point in the history
Some JWT parsers like auth0/node-jsonwebtoken and jwt.io complain about timestamps formatted as a string.
  • Loading branch information
StephenBeirlaen committed Dec 23, 2020
1 parent 43cb7a7 commit 00136e3
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 6 deletions.
5 changes: 3 additions & 2 deletions src/Encoding/MicrosecondBasedDateConversion.php
Expand Up @@ -8,6 +8,7 @@
use Lcobucci\JWT\Token\RegisteredClaims;

use function array_key_exists;
use function floatval;

final class MicrosecondBasedDateConversion implements ClaimsFormatter
{
Expand All @@ -25,7 +26,7 @@ public function formatClaims(array $claims): array
return $claims;
}

/** @return int|string */
/** @return int|float */
private function convertDate(DateTimeImmutable $date)
{
$seconds = $date->format('U');
Expand All @@ -35,6 +36,6 @@ private function convertDate(DateTimeImmutable $date)
return (int) $seconds;
}

return $seconds . '.' . $microseconds;
return floatval($seconds . '.' . $microseconds);
}
}
2 changes: 1 addition & 1 deletion test/unit/Encoding/ChainedFormatterTest.php
Expand Up @@ -34,6 +34,6 @@ public function formatClaimsShouldApplyAllConfiguredFormatters(): void
$formatted = $formatter->formatClaims($claims);

self::assertSame('test', $formatted[RegisteredClaims::AUDIENCE]);
self::assertSame('1487285080.123456', $formatted[RegisteredClaims::EXPIRATION_TIME]);
self::assertSame(1487285080.123456, $formatted[RegisteredClaims::EXPIRATION_TIME]);
}
}
6 changes: 3 additions & 3 deletions test/unit/Encoding/MicrosecondBasedDateConversionTest.php
Expand Up @@ -36,8 +36,8 @@ public function dateClaimsHaveMicrosecondsOrSeconds(): void
$formatted = $formatter->formatClaims($claims);

self::assertSame(1487285080, $formatted[RegisteredClaims::ISSUED_AT]);
self::assertSame('1487285080.000123', $formatted[RegisteredClaims::NOT_BEFORE]);
self::assertSame('1487285080.123456', $formatted[RegisteredClaims::EXPIRATION_TIME]);
self::assertSame(1487285080.000123, $formatted[RegisteredClaims::NOT_BEFORE]);
self::assertSame(1487285080.123456, $formatted[RegisteredClaims::EXPIRATION_TIME]);
self::assertSame('test', $formatted['testing']); // this should remain untouched
}

Expand All @@ -62,7 +62,7 @@ public function notAllDateClaimsNeedToBeConfigured(): void
$formatted = $formatter->formatClaims($claims);

self::assertSame(1487285080, $formatted[RegisteredClaims::ISSUED_AT]);
self::assertSame('1487285080.123456', $formatted[RegisteredClaims::EXPIRATION_TIME]);
self::assertSame(1487285080.123456, $formatted[RegisteredClaims::EXPIRATION_TIME]);
self::assertSame('test', $formatted['testing']); // this should remain untouched
}
}

0 comments on commit 00136e3

Please sign in to comment.