refreshToken method

Future<AuthResult> refreshToken([
  1. AuthProvider? provider
])

토큰 갱신

Implementation

Future<AuthResult> refreshToken([AuthProvider? provider]) async {
  _refreshCount++;

  if (delay != null) {
    await Future.delayed(delay!);
  }

  final targetProvider = provider ?? currentProvider;
  if (targetProvider == null) {
    return AuthResult.failure(
      provider: AuthProvider.kakao,
      errorMessage: '로그인된 상태가 아닙니다.',
      errorCode: 'REFRESH_FAILED',
    );
  }

  if (!targetProvider.supportsTokenRefresh) {
    return AuthResult.failure(
      provider: targetProvider,
      errorMessage: '${targetProvider.displayName}은(는) 토큰 갱신을 지원하지 않습니다.',
      errorCode: 'PROVIDER_NOT_SUPPORTED',
    );
  }

  if (_currentUser == null) {
    return AuthResult.failure(
      provider: targetProvider,
      errorMessage: '로그인된 상태가 아닙니다.',
      errorCode: 'REFRESH_FAILED',
    );
  }

  // 토큰 갱신 성공 - 만료 시간 연장
  _expiresAt = DateTime.now().add(const Duration(hours: 1));

  return AuthResult.success(
    provider: targetProvider,
    user: _currentUser,
    accessToken: 'mock_refreshed_access_token',
    refreshToken: 'mock_refreshed_refresh_token',
    expiresAt: _expiresAt,
  );
}