generateTokens method

  1. @override
Future<AuthResponse> generateTokens(
  1. Authenticatable user
)
override

Generates tokens for a user

user The user to generate tokens for Returns authentication response with tokens

Implementation

@override
Future<AuthResponse> generateTokens(Authenticatable user) async {
  final userId = user.getAuthIdentifier();
  final accessToken = _tokenGenerator.generateToken(
    prefix: userId.toString(),
  );

  // Store access token in database using injected service
  final tokenData = {
    'token': accessToken,
    'tokenable_id': userId,
    'guard': _providerKey,
    'type': 'access',
    'created_at': DateTime.now().toIso8601String(),
  };

  if (_tokenExpiry != null) {
    tokenData['expires_at'] =
        DateTime.now().add(_tokenExpiry).toIso8601String();
  }

  await _tokenService.storeToken(tokenData);

  // For Token driver, we can optionally generate refresh tokens too
  // This provides consistency with JWT driver behavior
  String? refreshToken;
  if (_refreshTokenExpiry != null) {
    refreshToken = _tokenGenerator.generateToken();
    // Store refresh token
    final refreshTokenData = {
      'token': refreshToken,
      'tokenable_id': userId,
      'guard': _providerKey,
      'type': 'refresh',
      'created_at': DateTime.now().toIso8601String(),
      'expires_at': DateTime.now().add(_refreshTokenExpiry).toIso8601String(),
    };

    await _tokenService.storeToken(refreshTokenData);
  }

  return AuthResponse(
    user: user.toAuthArray(),
    accessToken: accessToken,
    refreshToken: refreshToken,
    expiresIn: _tokenExpiry?.inSeconds,
    refreshExpiresIn: 604800, // 7 days
  );
}