diff --git a/yobble/Network/AuthService.swift b/yobble/Network/AuthService.swift index 8d7328b..e53d302 100644 --- a/yobble/Network/AuthService.swift +++ b/yobble/Network/AuthService.swift @@ -104,7 +104,8 @@ class AuthService { // Сохраняем токены в Keychain KeychainService.shared.save(loginResponse.access_token, forKey: "access_token", service: username) KeychainService.shared.save(loginResponse.refresh_token, forKey: "refresh_token", service: username) - KeychainService.shared.save(loginResponse.user_id, forKey: "user_id", service: username) + print("loginResponse.user_id \(loginResponse.user_id)") + KeychainService.shared.save(loginResponse.user_id, forKey: "userId", service: username) UserDefaults.standard.set(username, forKey: "currentUser") completion(true, nil) @@ -247,6 +248,7 @@ class AuthService { // Удаляем токены текущего пользователя KeychainService.shared.delete(forKey: "access_token", service: currentUser) KeychainService.shared.delete(forKey: "refresh_token", service: currentUser) + KeychainService.shared.delete(forKey: "userId", service: currentUser) // Сбрасываем текущего пользователя UserDefaults.standard.removeObject(forKey: "currentUser") diff --git a/yobble/ViewModels/LoginViewModel.swift b/yobble/ViewModels/LoginViewModel.swift index fdf90e8..3eca5ca 100644 --- a/yobble/ViewModels/LoginViewModel.swift +++ b/yobble/ViewModels/LoginViewModel.swift @@ -10,6 +10,7 @@ import Combine class LoginViewModel: ObservableObject { @Published var username: String = "" + @Published var userId: String = "" @Published var password: String = "" @Published var isLoading: Bool = true // сразу true, чтобы показать спиннер при автологине @Published var showError: Bool = false @@ -18,12 +19,14 @@ class LoginViewModel: ObservableObject { private let authService = AuthService() + private enum DefaultsKeys { + static let currentUser = "currentUser" + static let userId = "userId" + } + init() { - // Если username сохранён, подставим его сразу - if let savedUsername = UserDefaults.standard.string(forKey: "currentUser") { - username = savedUsername - } - + loadStoredUser() + // Запускаем автологин autoLogin() } @@ -33,6 +36,7 @@ class LoginViewModel: ObservableObject { DispatchQueue.main.async { // self?.isLoading = false if success { + self?.loadStoredUser() self?.isLoggedIn = true } else { self?.isLoggedIn = false @@ -53,6 +57,7 @@ class LoginViewModel: ObservableObject { DispatchQueue.main.async { self?.isLoading = false if success { + self?.loadStoredUser() self?.isLoggedIn = true } else { self?.errorMessage = error ?? NSLocalizedString("Неизвестная ошибка", comment: "") @@ -67,6 +72,7 @@ class LoginViewModel: ObservableObject { DispatchQueue.main.async { if success { self?.isLoggedIn = true // 👈 переключаем на главный экран после автологина + self?.loadStoredUser() } completion(success, message) } @@ -77,12 +83,13 @@ class LoginViewModel: ObservableObject { authService.logoutCurrentUser { [weak self] success, error in DispatchQueue.main.async { if success { - self?.username = UserDefaults.standard.string(forKey: "currentUser") ?? "" + self?.loadStoredUser() self?.password = "" self?.isLoggedIn = true self?.showError = false } else { self?.username = "" + self?.userId = "" self?.password = "" self?.isLoggedIn = false self?.errorMessage = error ?? NSLocalizedString("Ошибка при деавторизации.", comment: "") @@ -100,4 +107,12 @@ class LoginViewModel: ObservableObject { // showError = false // errorMessage = "" // } + + private func loadStoredUser() { + let defaults = UserDefaults.standard + username = defaults.string(forKey: DefaultsKeys.currentUser) ?? "" + userId = KeychainService.shared.get(forKey: DefaultsKeys.userId, service: username) ?? "" + + print("username: \(username) | userId: \(userId)") + } }