1
0
forked from baron/baron-sso

flutter 린트 적용

This commit is contained in:
2026-02-19 16:08:42 +09:00
parent 466e7f1e54
commit 3eb7ed01ee
8 changed files with 35 additions and 73 deletions

View File

@@ -12,7 +12,6 @@ import '../../../core/services/auth_token_store.dart';
import '../../../core/services/oidc_redirect_guard.dart';
import '../../../core/notifiers/auth_notifier.dart';
import '../domain/login_challenge_resolver.dart';
import '../domain/password_login_flow_policy.dart';
import '../../profile/domain/notifiers/profile_notifier.dart';
import '../../../core/services/web_window.dart';
@@ -742,7 +741,6 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
final localSessionMessage = tr(
'msg.userfront.login.verification.approved_local',
);
final linkLoginMessage = tr('msg.userfront.login.link.approved');
try {
final res = await AuthProxyService.verifyLoginCode(
sanitizedLoginId,
@@ -872,7 +870,6 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
}
Future<void> _handlePasswordLogin() async {
print("[Auth] _handlePasswordLogin START");
final input = _passwordLoginIdController.text.trim();
final password = _passwordController.text.trim();
if (input.isEmpty || password.isEmpty) {
@@ -889,29 +886,23 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
}
try {
print("[Auth] Calling AuthProxyService.loginWithPassword...");
final res = await AuthProxyService.loginWithPassword(
loginId,
password,
loginChallenge: _loginChallenge,
);
print("[Auth] loginWithPassword response: $res");
final jwt = res['sessionJwt'] ?? res['sessionToken'] ?? res['token'];
final provider = res['provider'] as String?;
final redirectTo = res['redirectTo'] as String?;
if (jwt != null) {
print("[Auth] JWT found, calling _onLoginSuccess. RedirectTo: $redirectTo");
_onLoginSuccess(jwt, provider: provider, redirectTo: redirectTo);
} else if (redirectTo != null && redirectTo.isNotEmpty) {
print("[Auth] Only redirectTo found. Redirecting...");
webWindow.redirectTo(redirectTo);
} else {
print("[Auth] No JWT and no redirectTo found.");
}
} catch (e) {
print("[Auth] _handlePasswordLogin Error: $e");
if (e.toString().contains("User not registered")) {
_showUnregisteredDialog();
} else {
@@ -1134,56 +1125,44 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
}
Future<void> _onLoginSuccess(String token, {String? provider, String? redirectTo}) async {
print("[Auth] _onLoginSuccess ENTRY. RedirectTo: $redirectTo, Token len: ${token.length}");
try {
if (!mounted) {
print("[Auth] _onLoginSuccess: Not mounted, returning.");
return;
}
// [Priority 1] Immediate External Redirection
if (redirectTo != null && redirectTo.isNotEmpty) {
print("[Auth] _onLoginSuccess: Has redirectTo. Saving token and redirecting...");
try {
final providerName = provider ?? AuthTokenStore.getProvider();
print("[Auth] _onLoginSuccess: Provider resolved: $providerName");
AuthTokenStore.setToken(token, provider: providerName);
print("[Auth] _onLoginSuccess: Token saved to store.");
} catch (stErr) {
print("[Auth] _onLoginSuccess: FAILED to save token: $stErr");
// ignore
}
print("[Auth] Calling webWindow.redirectTo: $redirectTo");
webWindow.redirectTo(redirectTo); // Removed await as it's void
return;
}
// [Priority 2] OIDC Challenge Handling
if (_loginChallenge != null && _loginChallenge!.isNotEmpty) {
print("[Auth] _onLoginSuccess: Has loginChallenge. Attempting auto-accept...");
try {
// Save token first, it's needed for acceptance
final providerName = provider ?? AuthTokenStore.getProvider();
AuthTokenStore.setToken(token, provider: providerName);
print("[Auth] _onLoginSuccess: Token saved for auto-accept.");
final res = await AuthProxyService.acceptOidcLogin(
_loginChallenge!,
token: token,
);
final nextRedirectTo = res['redirectTo'] as String?;
print("[Auth] Auto-accept response: $res");
if (nextRedirectTo != null && nextRedirectTo.isNotEmpty) {
print("[Auth] OIDC login accepted. Redirecting to: $nextRedirectTo");
webWindow.redirectTo(nextRedirectTo); // Removed await
return;
} else {
print("[Auth] Auto-accept successful but no redirectTo provided.");
}
} catch (e) {
print("[Auth] Auto-accept failed: $e");
_showError(
tr(
'msg.userfront.login.oidc_failed',
@@ -1193,7 +1172,6 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
}
}
print("[Auth] _onLoginSuccess: Standard Login Flow");
_logTokenDetails(token);
final providerName = provider ?? AuthTokenStore.getProvider();
@@ -1205,7 +1183,7 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
try {
await ref.read(profileProvider.notifier).loadProfile();
} catch (e) {
print("[Auth] Failed to pre-fetch profile: $e");
// ignore
}
final uri = Uri.base;
@@ -1215,21 +1193,17 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
redirectParam != null && redirectParam.isNotEmpty;
if (WebAuthIntegration.isPopup() || hasRedirectParam) {
print(
"[Auth] External integration detected (popup or redirect). Notifying...",
);
WebAuthIntegration.sendLoginSuccess(token);
AuthNotifier.instance.notify();
return;
}
print("[Auth] Login success. Navigating to root.");
AuthNotifier.instance.notify();
if (mounted) {
context.go('/');
}
} catch (globalErr) {
print("[Auth] CRITICAL ERROR in _onLoginSuccess: $globalErr");
// ignore
}
}

View File

@@ -1286,10 +1286,12 @@ class _SignupScreenState extends State<SignupScreen> {
@override
Widget build(BuildContext context) {
bool canGoNext = false;
if (_currentStep == 1 && _termsAccepted && _privacyAccepted)
if (_currentStep == 1 && _termsAccepted && _privacyAccepted) {
canGoNext = true;
if (_currentStep == 2 && _isEmailVerified && _isPhoneVerified)
}
if (_currentStep == 2 && _isEmailVerified && _isPhoneVerified) {
canGoNext = true;
}
if (_currentStep == 3) {
final nameOk = _nameController.text.trim().isNotEmpty;
if (_affiliationType == 'GENERAL') {