完善注册和重置流程

This commit is contained in:
anlicheng 2026-03-20 11:34:24 +08:00
parent 803737b574
commit a284e3faa0
4 changed files with 38 additions and 26 deletions

View File

@ -44,7 +44,7 @@ class RegisterModel {
return try await SDLAPIClient.doPost(path: "/register/sendVerfiyCode", params: params, as: RegisterSession.self) 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] = [ var params: [String: Any] = [
"session_id": sessionId, "session_id": sessionId,
"code": verifyCode, "code": verifyCode,

View File

@ -250,7 +250,7 @@ struct RegisterSubmitVerifyCodeView: View {
self.isProcessing = true self.isProcessing = true
Task { @MainActor in Task { @MainActor in
do { 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)) { withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
self.registerModel.stage = .setPassword(sessionId: sessionId) self.registerModel.stage = .setPassword(sessionId: sessionId)
self.registerModel.transitionEdge = .trailing self.registerModel.transitionEdge = .trailing

View File

@ -14,45 +14,54 @@ class ResetPasswordModel {
enum Stage { enum Stage {
case requestVerifyCode(username: String?) case requestVerifyCode(username: String?)
case submitVerifyCode(username: String) case submitVerifyCode(username: String, sessionId: Int)
case resetPassword(username: String) case resetPassword(username: String, sessionId: Int)
} }
var stage: Stage = .requestVerifyCode(username: nil) var stage: Stage = .requestVerifyCode(username: nil)
var transitionEdge: Edge = .trailing // var transitionEdge: Edge = .trailing //
//
struct ResetPasswordSession: Codable {
let sessionId: Int
enum CodingKeys: String, CodingKey {
case sessionId = "session_id"
}
}
private let baseParams: [String: Any] = [ private let baseParams: [String: Any] = [
"client_id": SystemConfig.getClientId(), "client_id": SystemConfig.getClientId(),
"mac": SystemConfig.macAddressString(mac: SystemConfig.getMacAddress()) "mac": SystemConfig.macAddressString(mac: SystemConfig.getMacAddress())
] ]
func requestVerifyCode(username: String) async throws -> String { func requestVerifyCode(username: String) async throws -> ResetPasswordSession {
var params: [String: Any] = [ var params: [String: Any] = [
"username": username "username": username
] ]
params.merge(baseParams) {$1} 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] = [ var params: [String: Any] = [
"username": username, "session_id": sessionId,
"verify_code": verifyCode, "code": verifyCode,
] ]
params.merge(baseParams) {$1} 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] = [ var params: [String: Any] = [
"username": username, "session_id": sessionId,
"password": password, "new_password": newPassword,
] ]
params.merge(baseParams) {$1} 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)
} }
} }

View File

@ -21,10 +21,10 @@ struct ResetPasswordRootView: View {
switch resetPasswordModel.stage { switch resetPasswordModel.stage {
case .requestVerifyCode(let username): case .requestVerifyCode(let username):
GetVerifyCodeView(username: username ?? "") GetVerifyCodeView(username: username ?? "")
case .submitVerifyCode(let username): case .submitVerifyCode(let username, let sessionId):
SubmitVerifyCodeView(username: username) SubmitVerifyCodeView(username: username, sessionId: sessionId)
case .resetPassword(let username): case .resetPassword(let username, let sessionId):
ResetPasswordView(username: username) ResetPasswordView(username: username, sessionId: sessionId)
} }
} }
.transition(.asymmetric( .transition(.asymmetric(
@ -46,9 +46,9 @@ struct GetVerifyCodeView: View {
var body: some View { var body: some View {
VStack(spacing: 24) { 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) .frame(width: 280)
Button { Button {
@ -76,9 +76,9 @@ struct GetVerifyCodeView: View {
self.isProcessing = true self.isProcessing = true
Task { @MainActor in Task { @MainActor in
do { do {
// _ = try await resetPasswordModel.requestVerifyCode(username: username) let resetSession = try await resetPasswordModel.requestVerifyCode(username: username)
withAnimation(.spring(duration: 0.6, bounce: 0.2)) { withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
resetPasswordModel.stage = .submitVerifyCode(username: username) resetPasswordModel.stage = .submitVerifyCode(username: username, sessionId: resetSession.sessionId)
resetPasswordModel.transitionEdge = .trailing resetPasswordModel.transitionEdge = .trailing
} }
} catch { } catch {
@ -95,6 +95,8 @@ struct GetVerifyCodeView: View {
struct SubmitVerifyCodeView: View { struct SubmitVerifyCodeView: View {
@Environment(ResetPasswordModel.self) var resetPasswordModel @Environment(ResetPasswordModel.self) var resetPasswordModel
let username: String let username: String
let sessionId: Int
@State private var code: String = "" @State private var code: String = ""
@State private var isProcessing = false @State private var isProcessing = false
@ -181,9 +183,9 @@ struct SubmitVerifyCodeView: View {
self.isProcessing = true self.isProcessing = true
Task { @MainActor in Task { @MainActor in
do { 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)) { 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 self.resetPasswordModel.transitionEdge = .trailing
} }
} catch { } catch {
@ -200,6 +202,7 @@ struct SubmitVerifyCodeView: View {
struct ResetPasswordView: View { struct ResetPasswordView: View {
@Environment(ResetPasswordModel.self) var resetPasswordModel @Environment(ResetPasswordModel.self) var resetPasswordModel
let username: String let username: String
let sessionId: Int
@State private var password = "" @State private var password = ""
@State private var confirm = "" @State private var confirm = ""
@State private var isProcessing = false @State private var isProcessing = false
@ -264,8 +267,8 @@ struct ResetPasswordView: View {
self.isProcessing = true self.isProcessing = true
Task { @MainActor in Task { @MainActor in
do { do {
//_ = try await resetPasswordModel.resetPassword(username: username, password: password) let result = try await resetPasswordModel.resetPassword(sessionId: sessionId, newPassword: password)
print("密码重置成功") print("密码重置成功: \(result)")
// //
} catch { } catch {
print("重置失败: \(error)") print("重置失败: \(error)")