JWTDriver.fromConfig constructor
JWTDriver.fromConfig(
- AuthConfig config,
- String providerKey, {
- TokenGenerator? tokenGenerator,
- TokenService? tokenService,
- TokenInvalidationStrategyFactory? strategyFactory,
Factory constructor with config and dependency injection
Implementation
factory JWTDriver.fromConfig(
AuthConfig config,
String providerKey, {
TokenGenerator? tokenGenerator,
TokenService? tokenService,
TokenInvalidationStrategyFactory? strategyFactory,
}) {
final provider = config.getProvider(providerKey);
final driverConfig = config.getDriver('jwt');
final secret =
(provider['jwt_secret'] ?? driverConfig['jwt_secret']) as String?;
if (secret == null || secret.isEmpty || secret == 'default-secret-key') {
throw const FormatException(
'JWT secret key must be configured and cannot be the default value. '
'Please set a secure JWT secret in your auth configuration.',
);
}
final accessSeconds = (provider['access_token_expiry'] ??
driverConfig['access_token_expiry']) as int?;
final accessExpiry = Duration(seconds: accessSeconds ?? 3600);
final refreshSeconds = (provider['refresh_token_expiry'] ??
driverConfig['refresh_token_expiry']) as int?;
final refreshExpiry = Duration(seconds: refreshSeconds ?? 604800);
// Create token service instance first to ensure it's not null
late final TokenService tokenServiceInstance;
try {
tokenServiceInstance = tokenService ?? DatabaseTokenService();
} catch (e) {
throw StateError(
'Failed to create TokenService: $e. '
'Ensure database connection is initialized before creating auth driver.',
);
}
// Create strategy factory with the guaranteed non-null service
late final TokenInvalidationStrategyFactory strategyFactoryInstance;
try {
strategyFactoryInstance = strategyFactory ??
TokenInvalidationStrategyFactory(tokenServiceInstance);
} catch (e) {
throw StateError(
'Failed to create TokenInvalidationStrategyFactory: $e',
);
}
return JWTDriver(
secret: secret,
accessTokenExpiry: accessExpiry,
refreshTokenExpiry: refreshExpiry,
tokenGenerator: tokenGenerator,
tokenService: tokenServiceInstance,
strategyFactory: strategyFactoryInstance,
config: config,
providerKey: providerKey,
);
}