signIn method
소셜 로그인
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,
);
}