signIn method

Future<AuthResult> signIn(
  1. AuthProvider provider
)

소셜 로그인

Implementation

Future<AuthResult> signIn(AuthProvider provider) async {
  _signInCount++;
  _signInCountByProvider[provider] =
      (_signInCountByProvider[provider] ?? 0) + 1;

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

  // 연속 실패 처리
  if (_failuresRemaining > 0) {
    _failuresRemaining--;
    return AuthResult.failure(
      provider: provider,
      errorMessage: _failureForRetry?.message ?? '실패',
      errorCode: _failureForRetry?.code,
      errorHint: _failureForRetry?.hint,
    );
  }

  // 실패 설정되어 있으면 실패 반환
  if (mockFailure != null) {
    return AuthResult.failure(
      provider: provider,
      errorMessage: mockFailure!.message ?? '로그인 실패',
      errorCode: mockFailure!.code,
      errorHint: mockFailure!.hint,
    );
  }

  // mockUser가 있으면 성공
  if (mockUser != null) {
    // provider 일치시키기
    final user = mockUser!.provider == provider
        ? mockUser!
        : KAuthUser(
            id: mockUser!.id,
            provider: provider,
            email: mockUser!.email,
            name: mockUser!.name,
            avatar: mockUser!.avatar,
            phone: mockUser!.phone,
            rawData: mockUser!.rawData,
          );

    _currentUser = user;
    _serverToken = mockServerToken;
    _expiresAt ??= DateTime.now().add(const Duration(hours: 1));
    _authStateController.add(user);

    return AuthResult.success(
      provider: provider,
      user: user,
      accessToken: 'mock_access_token',
      refreshToken: 'mock_refresh_token',
      expiresAt: _expiresAt,
    );
  }

  // 기본: 빈 사용자로 성공
  final user = KAuthUser(
    id: 'mock_user_${DateTime.now().millisecondsSinceEpoch}',
    provider: provider,
  );

  _currentUser = user;
  _serverToken = mockServerToken;
  _expiresAt ??= DateTime.now().add(const Duration(hours: 1));
  _authStateController.add(user);

  return AuthResult.success(
    provider: provider,
    user: user,
    accessToken: 'mock_access_token',
    expiresAt: _expiresAt,
  );
}