diff --git a/ios/App/Shared/util/ApiClient.swift b/ios/App/Shared/util/ApiClient.swift index cc5c1dbc..f403cbc3 100644 --- a/ios/App/Shared/util/ApiClient.swift +++ b/ios/App/Shared/util/ApiClient.swift @@ -183,6 +183,7 @@ class ApiClient { ] let refreshRequest = AF.request("\(serverConfig.address)/auth/refresh", method: .post, headers: refreshHeaders) + .validate(statusCode: 200..<300) refreshRequest.responseDecodable(of: RefreshResponse.self) { response in switch response.result { @@ -190,7 +191,6 @@ class ApiClient { guard let user = refreshResponse.user, !user.accessToken.isEmpty else { AbsLogger.error(message: "handleTokenRefresh: No access token in refresh response for server \(serverConfig.name)") - handleRefreshFailure() callback?(nil) return } @@ -206,7 +206,8 @@ class ApiClient { case .failure(let error): AbsLogger.error(message: "handleTokenRefresh: Refresh request failed for server \(serverConfig.name): \(error)") - handleRefreshFailure() + let status = response.response?.statusCode + if status == 401 || status == 403 { handleRefreshFailure() } callback?(nil) } } @@ -313,12 +314,10 @@ class ApiClient { private static func handleRefreshFailure() { AbsLogger.info(message: "handleRefreshFailure: Token refresh failed, clearing session") - // Clear the current server connection + let configId = Store.serverConfig?.id Store.serverConfig = nil - - // Remove refresh token from secure storage - if let serverConfig = Store.serverConfig { - _ = secureStorage.removeRefreshToken(serverConnectionConfigId: serverConfig.id) + if let configId = configId { + _ = secureStorage.removeRefreshToken(serverConnectionConfigId: configId) } // Notify webview frontend about token refresh failure