diff --git a/punchnet/Views/Register/RegisterModel.swift b/punchnet/Views/Register/RegisterModel.swift index c7a6feb..16c459e 100644 --- a/punchnet/Views/Register/RegisterModel.swift +++ b/punchnet/Views/Register/RegisterModel.swift @@ -44,7 +44,7 @@ class RegisterModel { return try await SDLAPIClient.doPost(path: "/register/sendVerfiyCode", params: params, as: RegisterSession.self) } - func submitVerifyCode(sessionId: Int, verifyCode: String) async throws -> String { + func submitVerifyCode(sessionId: Int, verifyCode: Int) async throws -> String { var params: [String: Any] = [ "session_id": sessionId, "code": verifyCode, diff --git a/punchnet/Views/Register/RegisterView.swift b/punchnet/Views/Register/RegisterView.swift index 6aa334b..4f4480d 100644 --- a/punchnet/Views/Register/RegisterView.swift +++ b/punchnet/Views/Register/RegisterView.swift @@ -250,7 +250,7 @@ struct RegisterSubmitVerifyCodeView: View { self.isProcessing = true Task { @MainActor in do { - let result = try await self.registerModel.submitVerifyCode(sessionId: sessionId, verifyCode: self.code) + let result = try await self.registerModel.submitVerifyCode(sessionId: sessionId, verifyCode: Int(self.code) ?? 0) withAnimation(.spring(duration: 0.6, bounce: 0.2)) { self.registerModel.stage = .setPassword(sessionId: sessionId) self.registerModel.transitionEdge = .trailing diff --git a/punchnet/Views/ResetPassword/ResetPasswordModel.swift b/punchnet/Views/ResetPassword/ResetPasswordModel.swift index 9941af3..94e3e4c 100644 --- a/punchnet/Views/ResetPassword/ResetPasswordModel.swift +++ b/punchnet/Views/ResetPassword/ResetPasswordModel.swift @@ -14,45 +14,54 @@ class ResetPasswordModel { enum Stage { case requestVerifyCode(username: String?) - case submitVerifyCode(username: String) - case resetPassword(username: String) + case submitVerifyCode(username: String, sessionId: Int) + case resetPassword(username: String, sessionId: Int) } var stage: Stage = .requestVerifyCode(username: nil) var transitionEdge: Edge = .trailing // 默认从右进入 + // 重置会话信息 + struct ResetPasswordSession: Codable { + let sessionId: Int + + enum CodingKeys: String, CodingKey { + case sessionId = "session_id" + } + } + private let baseParams: [String: Any] = [ "client_id": SystemConfig.getClientId(), "mac": SystemConfig.macAddressString(mac: SystemConfig.getMacAddress()) ] - func requestVerifyCode(username: String) async throws -> String { + func requestVerifyCode(username: String) async throws -> ResetPasswordSession { var params: [String: Any] = [ "username": username ] params.merge(baseParams) {$1} - return try await SDLAPIClient.doPost(path: "/auth/sendVerifyCode", params: params, as: String.self) + return try await SDLAPIClient.doPost(path: "/password/sendVerfiyCode", params: params, as: ResetPasswordSession.self) } - func submitVerifyCode(username: String, verifyCode: String) async throws -> String { + func submitVerifyCode(sessionId: Int, verifyCode: Int) async throws -> String { var params: [String: Any] = [ - "username": username, - "verify_code": verifyCode, + "session_id": sessionId, + "code": verifyCode, ] params.merge(baseParams) {$1} - return try await SDLAPIClient.doPost(path: "/auth/submitVerifyCode", params: params, as: String.self) + return try await SDLAPIClient.doPost(path: "/password/verfiyCode", params: params, as: String.self) } - func resetPassword(username: String, password: String) async throws -> String { + func resetPassword(sessionId: Int, newPassword: String) async throws -> String { var params: [String: Any] = [ - "username": username, - "password": password, + "session_id": sessionId, + "new_password": newPassword, ] params.merge(baseParams) {$1} - return try await SDLAPIClient.doPost(path: "/auth/resetPassword", params: params, as: String.self) + return try await SDLAPIClient.doPost(path: "/password/reset", params: params, as: String.self) } } diff --git a/punchnet/Views/ResetPassword/ResetPasswordView.swift b/punchnet/Views/ResetPassword/ResetPasswordView.swift index 635facb..f526462 100644 --- a/punchnet/Views/ResetPassword/ResetPasswordView.swift +++ b/punchnet/Views/ResetPassword/ResetPasswordView.swift @@ -21,10 +21,10 @@ struct ResetPasswordRootView: View { switch resetPasswordModel.stage { case .requestVerifyCode(let username): GetVerifyCodeView(username: username ?? "") - case .submitVerifyCode(let username): - SubmitVerifyCodeView(username: username) - case .resetPassword(let username): - ResetPasswordView(username: username) + case .submitVerifyCode(let username, let sessionId): + SubmitVerifyCodeView(username: username, sessionId: sessionId) + case .resetPassword(let username, let sessionId): + ResetPasswordView(username: username, sessionId: sessionId) } } .transition(.asymmetric( @@ -46,9 +46,9 @@ struct GetVerifyCodeView: View { var body: some View { VStack(spacing: 24) { - headerSection(title: "重置密码", subtitle: "请输入关联的手机号或邮箱来验证身份") + headerSection(title: "重置密码", subtitle: "请输入关联的邮箱来验证身份") - PunchTextField(icon: "person.crop.circle", placeholder: "手机号 / 邮箱", text: $username) + PunchTextField(icon: "person.crop.circle", placeholder: "邮箱", text: $username) .frame(width: 280) Button { @@ -76,9 +76,9 @@ struct GetVerifyCodeView: View { self.isProcessing = true Task { @MainActor in do { - // _ = try await resetPasswordModel.requestVerifyCode(username: username) + let resetSession = try await resetPasswordModel.requestVerifyCode(username: username) withAnimation(.spring(duration: 0.6, bounce: 0.2)) { - resetPasswordModel.stage = .submitVerifyCode(username: username) + resetPasswordModel.stage = .submitVerifyCode(username: username, sessionId: resetSession.sessionId) resetPasswordModel.transitionEdge = .trailing } } catch { @@ -95,6 +95,8 @@ struct GetVerifyCodeView: View { struct SubmitVerifyCodeView: View { @Environment(ResetPasswordModel.self) var resetPasswordModel let username: String + let sessionId: Int + @State private var code: String = "" @State private var isProcessing = false @@ -181,9 +183,9 @@ struct SubmitVerifyCodeView: View { self.isProcessing = true Task { @MainActor in do { - // _ = try await resetPasswordModel.submitVerifyCode(username: username, verifyCode: code) + let result = try await resetPasswordModel.submitVerifyCode(sessionId: sessionId, verifyCode: Int(code) ?? 0) withAnimation(.spring(duration: 0.6, bounce: 0.2)) { - self.resetPasswordModel.stage = .resetPassword(username: username) + self.resetPasswordModel.stage = .resetPassword(username: username, sessionId: sessionId) self.resetPasswordModel.transitionEdge = .trailing } } catch { @@ -200,6 +202,7 @@ struct SubmitVerifyCodeView: View { struct ResetPasswordView: View { @Environment(ResetPasswordModel.self) var resetPasswordModel let username: String + let sessionId: Int @State private var password = "" @State private var confirm = "" @State private var isProcessing = false @@ -264,8 +267,8 @@ struct ResetPasswordView: View { self.isProcessing = true Task { @MainActor in do { - //_ = try await resetPasswordModel.resetPassword(username: username, password: password) - print("密码重置成功") + let result = try await resetPasswordModel.resetPassword(sessionId: sessionId, newPassword: password) + print("密码重置成功: \(result)") // 此处可添加重置成功后的跳转逻辑 } catch { print("重置失败: \(error)")