50 lines
1.2 KiB
Swift
50 lines
1.2 KiB
Swift
import SwiftUI
|
|
import Combine
|
|
|
|
/// 管理用户认证状态的类
|
|
public class AuthState: ObservableObject {
|
|
@Published public var isAuthenticated: Bool = false {
|
|
didSet {
|
|
print("🔔 认证状态变更: \(isAuthenticated ? "已登录" : "已登出")")
|
|
}
|
|
}
|
|
@Published public var isLoading = false
|
|
@Published public var errorMessage: String?
|
|
@Published public var user: User?
|
|
|
|
// 单例模式
|
|
public static let shared = AuthState()
|
|
|
|
private init() {}
|
|
|
|
/// 登录成功时调用
|
|
public func login(user: User? = nil) {
|
|
if let user = user {
|
|
self.user = user
|
|
}
|
|
isAuthenticated = true
|
|
errorMessage = nil
|
|
}
|
|
|
|
/// 登出时调用
|
|
public func logout() {
|
|
print("👋 用户登出")
|
|
user = nil
|
|
isAuthenticated = false
|
|
|
|
// 清除用户数据
|
|
TokenManager.shared.clearTokens()
|
|
UserDefaults.standard.removeObject(forKey: "lastLoginUser")
|
|
}
|
|
|
|
/// 更新加载状态
|
|
public func setLoading(_ loading: Bool) {
|
|
isLoading = loading
|
|
}
|
|
|
|
/// 设置错误信息
|
|
public func setError(_ message: String) {
|
|
errorMessage = message
|
|
}
|
|
}
|