完善注册和重置流程
This commit is contained in:
parent
803737b574
commit
a284e3faa0
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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)")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user