create static method
Create a JWT token
Implementation
static JWT create(Map<String, dynamic> payload, {String? secret, Duration? expiresIn}) {
final now = DateTime.now();
final headerMap = {
'alg': 'HS256',
'typ': 'JWT',
};
// Create a copy of the payload to avoid mutation
final payloadCopy = Map<String, dynamic>.from(payload);
// Add issued at
if (payloadCopy['iat'] == null) {
payloadCopy['iat'] = (now.millisecondsSinceEpoch / 1000).round();
}
// Add expiration
if (expiresIn != null) {
payloadCopy['exp'] = (now.add(expiresIn).millisecondsSinceEpoch / 1000).round();
}
final headerBase64 = _base64Encode(jsonEncode(headerMap));
final payloadBase64 = _base64Encode(jsonEncode(payloadCopy));
final signingInput = '$headerBase64.$payloadBase64';
String? signature;
if (secret != null) {
final key = utf8.encode(secret);
final bytes = utf8.encode(signingInput);
final hmac = Hmac(sha256, key);
final digest = hmac.convert(bytes);
signature = _base64UrlEncode(digest.bytes);
}
final token = '$signingInput.${signature ?? ''}';
return JWT(
token: token,
payload: payloadCopy,
signature: signature,
issuedAt: now,
expiresAt: payloadCopy['exp'] != null ? DateTime.fromMillisecondsSinceEpoch(payloadCopy['exp'] * 1000) : null,
);
}