From d27ab784cc8147f5574fe0bad13d228c34fd3ed1 Mon Sep 17 00:00:00 2001 From: jinyaqiu Date: Wed, 20 Aug 2025 12:25:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 135850 -> 136171 bytes wake/Models/AuthModels.swift | 43 +++ wake/Utils/NetworkService.swift | 255 ++++++++++++++++-- wake/Utils/TokenManager.swift | 109 +------- wake/View/Login/Login.swift | 176 ++---------- 5 files changed, 297 insertions(+), 286 deletions(-) create mode 100644 wake/Models/AuthModels.swift diff --git a/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate b/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate index ee572fb9537db34c3a457c2f865431554809d3d6..c9e53f0bc41e1567f5c6a098291f333d6ac85066 100644 GIT binary patch literal 136171 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: Codable { + let code: Int + let data: T? + let message: String? +} + +/// 用户登录信息 +struct UserLoginInfo: Codable { + let userId: String + let accessToken: String + let refreshToken: String + let nickname: String + let account: String + let email: String + let avatarFileUrl: String? + + enum CodingKeys: String, CodingKey { + case userId = "user_id" + case accessToken = "access_token" + case refreshToken = "refresh_token" + case nickname + case account + case email + case avatarFileUrl = "avatar_file_url" + } +} + +/// 登录响应数据 +struct LoginResponseData: Codable { + let userLoginInfo: UserLoginInfo + let isNewUser: Bool + + enum CodingKeys: String, CodingKey { + case userLoginInfo = "user_login_info" + case isNewUser = "is_new_user" + } +} + +/// 认证响应模型 +typealias AuthResponse = BaseResponse diff --git a/wake/Utils/NetworkService.swift b/wake/Utils/NetworkService.swift index ffe53b0..ac67c70 100644 --- a/wake/Utils/NetworkService.swift +++ b/wake/Utils/NetworkService.swift @@ -1,5 +1,23 @@ import Foundation +// 添加登出通知 +extension Notification.Name { + static let userDidLogoutNotification = Notification.Name("UserDidLogoutNotification") +} + +// 请求标识符 +private struct RequestIdentifier { + static var currentId: Int = 0 + static var lock = NSLock() + + static func next() -> Int { + lock.lock() + defer { lock.unlock() } + currentId += 1 + return currentId + } +} + enum NetworkError: Error { case invalidURL case noData @@ -41,6 +59,9 @@ class NetworkService { "Accept": "application/json" ] + private var isRefreshing = false + private var requestsToRetry: [(URLRequest, (Result) -> Void, Int)] = [] + private init() {} // MARK: - 基础请求方法 @@ -51,8 +72,13 @@ class NetworkService { headers: [String: String]? = nil, completion: @escaping (Result) -> Void ) { + // 生成请求ID + let requestId = RequestIdentifier.next() + // 构建URL - guard let url = URL(string: APIConfig.baseURL + path) else { + let fullURL = APIConfig.baseURL + path + guard let url = URL(string: fullURL) else { + print("❌ [Network][#\(requestId)][\(method) \(path)] 无效的URL") completion(.failure(.invalidURL)) return } @@ -81,24 +107,39 @@ class NetworkService { do { request.httpBody = try JSONSerialization.data(withJSONObject: parameters) } catch { + print("❌ [Network][#\(requestId)][\(method) \(path)] 参数序列化失败: \(error.localizedDescription)") completion(.failure(.other(error))) return } } - // 打印请求信息(调试用) - print("🌐 [Network] \(method) \(url.absoluteString)") - if let headers = request.allHTTPHeaderFields { - print("📤 Headers: \(headers)") - } - if let body = request.httpBody, let bodyString = String(data: body, encoding: .utf8) { - print("📦 Body: \(bodyString)") - } + // 打印请求信息 + print(""" + 🌐 [Network][#\(requestId)][\(method) \(path)] 开始请求 + 🔗 URL: \(url.absoluteString) + 📤 Headers: \(request.allHTTPHeaderFields ?? [:]) + 📦 Body: \(request.httpBody.flatMap { String(data: $0, encoding: .utf8) } ?? "") + """) // 创建任务 + let startTime = Date() let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in + let duration = String(format: "%.3fs", Date().timeIntervalSince(startTime)) + // 处理响应 - self?.handleResponse(data: data, response: response, error: error, completion: completion) + self?.handleResponse( + requestId: requestId, + method: method, + path: path, + data: data, + response: response, + error: error, + request: request, + duration: duration, + completion: { (result: Result) in + completion(result) + } + ) } // 开始请求 @@ -106,44 +147,119 @@ class NetworkService { } private func handleResponse( + requestId: Int, + method: String, + path: String, data: Data?, response: URLResponse?, error: Error?, + request: URLRequest, + duration: String, completion: @escaping (Result) -> Void ) { - // 打印响应信息(调试用) + // 打印响应信息 if let httpResponse = response as? HTTPURLResponse { - print("📥 [Network] Status: \(httpResponse.statusCode) \(HTTPURLResponse.localizedString(forStatusCode: httpResponse.statusCode))") - if let headers = httpResponse.allHeaderFields as? [String: Any] { - print("📥 Headers: \(headers)") + let statusCode = httpResponse.statusCode + let statusMessage = HTTPURLResponse.localizedString(forStatusCode: statusCode) + + // 处理401未授权 + if statusCode == 401 { + print(""" + 🔑 [Network][#\(requestId)][\(method) \(path)] 检测到未授权,尝试刷新token... + ⏱️ 耗时: \(duration) + """) + + // 将请求加入重试队列 + let dataResult = data.flatMap { Result.success($0) } ?? .failure(.noData) + self.requestsToRetry.append((request, { result in + switch result { + case .success(let data): + do { + let decoder = JSONDecoder() + let result = try decoder.decode(T.self, from: data) + print(""" + ✅ [Network][#\(requestId)][\(method) \(path)] 重试成功 + ⏱️ 总耗时: \(duration) (包含token刷新时间) + """) + completion(.success(result)) + } catch let decodingError as DecodingError { + print(""" + ❌ [Network][#\(requestId)][\(method) \(path)] JSON解析失败 + 🔍 错误: \(decodingError.localizedDescription) + 📦 原始数据: \(String(data: data, encoding: .utf8) ?? "") + """) + completion(.failure(.decodingError(decodingError))) + } catch { + print(""" + ❌ [Network][#\(requestId)][\(method) \(path)] 未知错误 + 🔍 错误: \(error.localizedDescription) + """) + completion(.failure(.unknownError(error))) + } + case .failure(let error): + print(""" + ❌ [Network][#\(requestId)][\(method) \(path)] 重试失败 + 🔍 错误: \(error.localizedDescription) + """) + completion(.failure(error)) + } + }, requestId)) + + // 如果没有正在刷新的请求,则开始刷新token + if !isRefreshing { + refreshAndRetryRequests() + } + return } - // 检查状态码 - if !(200...299).contains(httpResponse.statusCode) { - print("❌ [Network] 请求失败,状态码: \(httpResponse.statusCode)") - if let data = data, let errorResponse = String(data: data, encoding: .utf8) { - print("❌ [Network] 错误响应: \(errorResponse)") - } + // 处理其他错误状态码 + if !(200...299).contains(statusCode) { + let errorMessage = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" + print(""" + ❌ [Network][#\(requestId)][\(method) \(path)] 请求失败 + 📊 状态码: \(statusCode) (\(statusMessage)) + ⏱️ 耗时: \(duration) + 🔍 错误响应: \(errorMessage) + """) + completion(.failure(.serverError("状态码: \(statusCode), 响应: \(errorMessage)"))) + return } + + // 成功响应 + print(""" + ✅ [Network][#\(requestId)][\(method) \(path)] 请求成功 + 📊 状态码: \(statusCode) (\(statusMessage)) + ⏱️ 耗时: \(duration) + """) } // 处理网络错误 if let error = error { - print("❌ [Network] 网络请求错误: \(error.localizedDescription)") + print(""" + ❌ [Network][#\(requestId)][\(method) \(path)] 网络请求失败 + ⏱️ 耗时: \(duration) + 🔍 错误: \(error.localizedDescription) + """) completion(.failure(.networkError(error))) return } // 检查数据是否存在 guard let data = data else { - print("❌ [Network] 没有收到数据") + print(""" + ❌ [Network][#\(requestId)][\(method) \(path)] 没有收到数据 + ⏱️ 耗时: \(duration) + """) completion(.failure(.noData)) return } // 打印响应数据(调试用) if let responseString = String(data: data, encoding: .utf8) { - print("📥 [Network] 响应数据: \(responseString)") + print(""" + 📥 [Network][#\(requestId)][\(method) \(path)] 响应数据: + \(responseString.prefix(1000))\(responseString.count > 1000 ? "..." : "") + """) } do { @@ -152,17 +268,86 @@ class NetworkService { let result = try decoder.decode(T.self, from: data) completion(.success(result)) } catch let decodingError as DecodingError { - print("❌ [Network] JSON解析失败: \(decodingError.localizedDescription)") - if let dataString = String(data: data, encoding: .utf8) { - print("📋 [Network] 原始响应: \(dataString)") - } + print(""" + ❌ [Network][#\(requestId)][\(method) \(path)] JSON解析失败 + 🔍 错误: \(decodingError.localizedDescription) + 📦 原始数据: \(String(data: data, encoding: .utf8) ?? "") + """) completion(.failure(.decodingError(decodingError))) } catch { - print("❌ [Network] 未知错误: \(error.localizedDescription)") + print(""" + ❌ [Network][#\(requestId)][\(method) \(path)] 未知错误 + 🔍 错误: \(error.localizedDescription) + """) completion(.failure(.unknownError(error))) } } + private func refreshAndRetryRequests() { + guard !isRefreshing else { return } + + isRefreshing = true + let refreshStartTime = Date() + + print("🔄 [Network] 开始刷新Token...") + + TokenManager.shared.refreshToken { [weak self] success, _ in + guard let self = self else { return } + + let refreshDuration = String(format: "%.3fs", Date().timeIntervalSince(refreshStartTime)) + + if success { + print(""" + ✅ [Network] Token刷新成功 + ⏱️ 耗时: \(refreshDuration) + 🔄 准备重试\(self.requestsToRetry.count)个请求... + """) + + // 重试所有待处理的请求 + let requestsToRetry = self.requestsToRetry + self.requestsToRetry.removeAll() + + for (request, completion, requestId) in requestsToRetry { + var newRequest = request + if let token = KeychainHelper.getAccessToken() { + newRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + } + + let task = URLSession.shared.dataTask(with: newRequest) { data, response, error in + if let data = data { + completion(.success(data)) + } else if let error = error { + completion(.failure(.networkError(error))) + } else { + completion(.failure(.noData)) + } + } + task.resume() + } + } else { + print(""" + ❌ [Network] Token刷新失败 + ⏱️ 耗时: \(refreshDuration) + 🚪 清除登录状态... + """) + + // 清除token并通知需要重新登录 + TokenManager.shared.clearTokens() + DispatchQueue.main.async { + NotificationCenter.default.post(name: .userDidLogoutNotification, object: nil) + } + + // 所有待处理的请求都返回未授权错误 + self.requestsToRetry.forEach { _, completion, _ in + completion(.failure(.unauthorized)) + } + self.requestsToRetry.removeAll() + } + + self.isRefreshing = false + } + } + // MARK: - 公共方法 /// GET 请求 @@ -185,6 +370,20 @@ class NetworkService { request("POST", path: path, parameters: parameters, headers: headers, completion: completion) } + /// POST 请求(带Token) + func postWithToken( + path: String, + parameters: [String: Any]? = nil, + headers: [String: String]? = nil, + completion: @escaping (Result) -> Void + ) { + var headers = headers ?? [:] + if let token = KeychainHelper.getAccessToken() { + headers["Authorization"] = "Bearer \(token)" + } + post(path: path, parameters: parameters, headers: headers, completion: completion) + } + /// DELETE 请求 func delete( path: String, diff --git a/wake/Utils/TokenManager.swift b/wake/Utils/TokenManager.swift index 3b11939..ad6c2d9 100644 --- a/wake/Utils/TokenManager.swift +++ b/wake/Utils/TokenManager.swift @@ -202,7 +202,7 @@ class TokenManager { let paddingLength = requiredLength - length if paddingLength > 0 { let padding = "".padding(toLength: Int(paddingLength), withPad: "=", startingAt: 0) - base64 += padding + base64 = base64 + padding } return Data(base64Encoded: base64) @@ -212,7 +212,7 @@ class TokenManager { /// - Parameter completion: 刷新完成回调 /// - success: 是否刷新成功 /// - error: 错误信息(如果有) - private func refreshToken(completion: @escaping (Bool, Error?) -> Void) { + func refreshToken(completion: @escaping (Bool, Error?) -> Void) { // 获取刷新令牌 guard let refreshToken = KeychainHelper.getRefreshToken(), !refreshToken.isEmpty else { // 没有可用的刷新令牌 @@ -232,7 +232,7 @@ class TokenManager { ] // 发送刷新请求 - NetworkService.shared.postWithToken(path: "/v1/iam/access-token-refresh", parameters: parameters) { + NetworkService.shared.post(path: "/v1/iam/access-token-refresh", parameters: parameters) { (result: Result) in switch result { @@ -312,109 +312,6 @@ private struct IdentityCheckResponse: Codable { } } -// MARK: - NetworkService扩展 -/// 为NetworkService添加带token验证的请求方法 -extension NetworkService { - // MARK: - 核心请求方法 - - /// 带token验证的网络请求 - /// - Parameters: - /// - method: HTTP方法(GET/POST/PUT/DELETE等) - /// - path: 接口路径 - /// - parameters: 请求参数 - /// - headers: 自定义请求头 - /// - completion: 完成回调 - func requestWithToken( - _ method: String, - path: String, - parameters: [String: Any]? = nil, - headers: [String: String]? = nil, - completion: @escaping (Result) -> Void - ) { - // 1. 验证并刷新token - TokenManager.shared.validateAndRefreshTokenIfNeeded { [weak self] isValid, error in - guard let self = self else { return } - - if isValid { - // 2. token有效,继续发送原始请求 - switch method.uppercased() { - case "GET": - self.get(path: path, parameters: parameters, headers: headers, completion: completion) - case "POST": - self.post(path: path, parameters: parameters, headers: headers, completion: completion) - case "PUT": - self.put(path: path, parameters: parameters, headers: headers, completion: completion) - case "DELETE": - self.delete(path: path, parameters: parameters, headers: headers, completion: completion) - default: - let error = NSError( - domain: "NetworkService", - code: 400, - userInfo: [NSLocalizedDescriptionKey: "不支持的HTTP方法: \(method)"] - ) - completion(.failure(.other(error))) - } - } else { - // 3. token无效,返回未授权错误 - let error = error ?? NSError( - domain: "NetworkService", - code: 401, - userInfo: [NSLocalizedDescriptionKey: "未授权访问"] - ) - - DispatchQueue.main.async { - completion(.failure(.unauthorized)) - } - - // 4. 发送登出通知,让应用处理未授权情况 - NotificationCenter.default.post(name: .userDidLogout, object: nil) - } - } - } - - // MARK: - 便捷方法 - - /// 带token验证的GET请求 - func getWithToken( - path: String, - parameters: [String: Any]? = nil, - headers: [String: String]? = nil, - completion: @escaping (Result) -> Void - ) { - requestWithToken("GET", path: path, parameters: parameters, headers: headers, completion: completion) - } - - /// 带token验证的POST请求 - func postWithToken( - path: String, - parameters: [String: Any]? = nil, - headers: [String: String]? = nil, - completion: @escaping (Result) -> Void - ) { - requestWithToken("POST", path: path, parameters: parameters, headers: headers, completion: completion) - } - - /// 带token验证的PUT请求 - func putWithToken( - path: String, - parameters: [String: Any]? = nil, - headers: [String: String]? = nil, - completion: @escaping (Result) -> Void - ) { - requestWithToken("PUT", path: path, parameters: parameters, headers: headers, completion: completion) - } - - /// 带token验证的DELETE请求 - func deleteWithToken( - path: String, - parameters: [String: Any]? = nil, - headers: [String: String]? = nil, - completion: @escaping (Result) -> Void - ) { - requestWithToken("DELETE", path: path, parameters: parameters, headers: headers, completion: completion) - } -} - // MARK: - 通知名称 /// 定义应用中使用的通知名称 extension Notification.Name { diff --git a/wake/View/Login/Login.swift b/wake/View/Login/Login.swift index 5a5e02d..4069ecd 100644 --- a/wake/View/Login/Login.swift +++ b/wake/View/Login/Login.swift @@ -2,6 +2,7 @@ import SwiftUI import AuthenticationServices import Alamofire import CryptoKit +import Foundation /// 主登录视图 - 处理苹果登录 struct LoginView: View { @@ -146,9 +147,6 @@ struct LoginView: View { private func handleAppleSignIn(result: Result) { print("🔵 [Apple Sign In] 开始处理登录结果...") - DispatchQueue.main.async { - self.isLoggedIn = true - } switch result { case .success(let authResults): print("✅ [Apple Sign In] 登录授权成功") @@ -195,12 +193,6 @@ struct LoginView: View { print("🔵 [Apple ID] 准备调用后端认证...") authenticateWithBackend( - userId: appleIDCredential.user, - email: appleIDCredential.email ?? "", - name: [appleIDCredential.fullName?.givenName, - appleIDCredential.fullName?.familyName] - .compactMap { $0 } - .joined(separator: " "), identityToken: identityToken, authCode: authCode ) @@ -209,169 +201,49 @@ struct LoginView: View { // MARK: - Network private func authenticateWithBackend( - userId: String, - email: String, - name: String, identityToken: String, authCode: String? ) { isLoading = true print("🔵 [Backend] 开始后端认证...") - let endpoint = "\(APIConfig.baseURL)/iam/login/oauth" - guard let url = URL(string: endpoint) else { - print("❌ [Backend] 无效的URL: \(endpoint)") - self.handleAuthenticationError(NSError(domain: "", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的URL"])) - return - } - var parameters: [String: Any] = [ - "provider": "Apple", "token": identityToken, - "userId": userId, - "email": email, - "name": name, + "provider": "Apple", ] if let authCode = authCode { parameters["authorization_code"] = authCode } - print("📤 [Backend] 请求URL: \(endpoint)") - print("📤 [Backend] 请求参数: \(parameters)") - - var request = URLRequest(url: url) - request.httpMethod = "POST" - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - - do { - request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: []) - } catch { - print("❌ [Backend] 参数序列化失败: \(error.localizedDescription)") - self.handleAuthenticationError(error) - return - } - - let task = URLSession.shared.dataTask(with: request) { data, response, error in + NetworkService.shared.post( + path: "/iam/login/oauth", + parameters: parameters + ) { (result: Result) in DispatchQueue.main.async { - self.isLoading = false - - // 1. 处理网络错误 - if let error = error { - print("❌ [Backend] 请求失败: \(error.localizedDescription)") - self.handleAuthenticationError(error) - return - } - - // 2. 检查响应 - guard let httpResponse = response as? HTTPURLResponse else { - let error = NSError(domain: "", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的服务器响应"]) - print("❌ [Backend] \(error.localizedDescription)") - self.handleAuthenticationError(error) - return - } - - // 3. 打印响应状态码和头部信息 - let statusCode = httpResponse.statusCode - print(""" - 📥 [Backend] 响应信息: - - 状态码: \(statusCode) - - URL: \(httpResponse.url?.absoluteString ?? "N/A") - - Headers: \(httpResponse.allHeaderFields) - """) - - // 4. 处理响应数据 - if let data = data { - if let jsonString = String(data: data, encoding: .utf8) { - print("📦 [Backend] 响应内容: \(jsonString)") + switch result { + case .success(let authResponse): + print("✅ [Backend] 认证成功") + + // 保存token等认证信息 + if let loginInfo = authResponse.data?.userLoginInfo { + KeychainHelper.saveAccessToken(loginInfo.accessToken) + KeychainHelper.saveRefreshToken(loginInfo.refreshToken) + // 可以在这里保存其他用户信息,如userId, nickname等 + print("👤 用户ID: \(loginInfo.userId)") + print("👤 昵称: \(loginInfo.nickname)") } - // 5. 解析响应数据 - do { - // 首先解析顶层 JSON - if let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] { - print("✅ [Backend] 响应解析成功") - print("📦 [Backend] 响应内容: \(json)") - - // 检查状态码 - if let code = json["code"] as? Int, code != 0 { - let errorMsg = json["message"] as? String ?? "未知错误" - print("❌ [Backend] 请求失败: \(errorMsg)") - self.showError(message: errorMsg) - return - } - - // 获取 data 字典 - guard let responseData = json["data"] as? [String: Any] else { - print("⚠️ [Backend] 未找到 data 字段") - self.showError(message: "服务器返回数据格式错误") - return - } - - // 获取 user_login_info 字典 - if let userLoginInfo = responseData["user_login_info"] as? [String: Any] { - print("👤 [Backend] 用户登录信息: \(userLoginInfo)") - - // 保存令牌到 Keychain - if let accessToken = userLoginInfo["access_token"] as? String { - _ = KeychainHelper.saveAccessToken(accessToken) - print("🔑 [Keychain] 访问令牌已保存") - - // 保存用户信息到 UserDefaults - var userInfo: [String: Any] = [ - "user_id": userLoginInfo["user_id"] as? Int64 ?? 0, - "account": userLoginInfo["account"] as? String ?? "", - "nickname": userLoginInfo["nickname"] as? String ?? "", - "avatar": userLoginInfo["avatar_file_url"] as? String ?? "" - ] - UserDefaults.standard.set(userInfo, forKey: "currentUserInfo") - print("👤 [UserDefaults] 用户信息已保存") - } - - if let refreshToken = userLoginInfo["refresh_token"] as? String { - _ = KeychainHelper.saveRefreshToken(refreshToken) - print("🔄 [Keychain] 刷新令牌已保存") - } - - // 处理认证成功 - DispatchQueue.main.async { - self.handleSuccessfulAuthentication() - } - return - } else { - print("⚠️ [Backend] 未找到 user_login_info 字段") - self.showError(message: "登录信息不完整") - } - } - } catch { - print("⚠️ [Backend] 响应解析失败: \(error.localizedDescription)") - self.showError(message: "数据解析失败") - } - } - - // 6. 如果上面的 return 没有执行,说明认证失败 - if statusCode < 200 || statusCode >= 300 { - let errorMessage: String - switch statusCode { - case 400: - errorMessage = "请求参数错误" - case 401: - errorMessage = "认证失败,请重新登录" - case 403: - errorMessage = "权限不足" - case 404: - errorMessage = "请求的接口不存在" - case 500...599: - errorMessage = "服务器内部错误,请稍后重试" - default: - errorMessage = "未知错误 (状态码: \(statusCode))" - } - self.showError(message: errorMessage) + self.isLoggedIn = true + + case .failure(let error): + print("❌ [Backend] 认证失败: \(error.localizedDescription)") + self.errorMessage = error.localizedDescription + self.showError = true + self.isLoading = false } } } - - task.resume() } // MARK: - Helpers