QuickAuth

QuickAuth 是一个为 Swift 应用程序设计的简单 OAuth2 认证库。 它处理所有已授权和未授权的网络请求,利用访问令牌和刷新令牌进行身份验证。 QuickAuth 强调安全性,避免在库端存储敏感信息,而是将此责任委托给客户端应用程序。 重要的是,QuickAuth 构建于 Combine 框架之上,为 Swift 中的异步编程提供了一种现代化的方法。

特性

安装

快速开始

设置您的 QuickAuth

首先,在您的应用程序中初始化 QuickAuth,通常在您的 AppDelegate 或 SceneDelegate 中

QuickAuth.shared.setDataSource(dataSource: NetworkManager.shared)
QuickAuth.shared.setDelegate(delegate: NetworkManager.shared)

实现 QuickAuthDataSource 和 QuickAuthDelegate

在您的网络管理器或等效类中实现 QuickAuthDatasourceProtocol 和 QuickAuthDelegate,以处理令牌管理和日志记录

class NetworkManager: QuickAuthDatasourceProtocol, QuickAuthDelegate {
    static let shared = NetworkManager()
    private let tokenService = TokenService()

    func getReauthRequest() throws -> Request {
        // Implement your reauth request
    }

    func getTokenService() -> any QuickAuthAccessServiceProtocol {
        return tokenService
    }

    func log(message: String) {
        // Implement logging
    }
}

发送请求

以下是一个 IdentityRequest 可能如何实现的示例。 此枚举包括登录、重新身份验证和获取帐户详细信息的情况,展示了如何处理已验证和未验证的请求。

enum IdentityRequest: Request {
    case login(model: LoginDataModel)
    case reauth(model: RefreshTokenDataModel)
    case myAccount

    var host: String {
        return "https://example.com"
    }

    var path: String {
        switch self {
        case .login:
            return "/auth/o/token/"
        case .reauth:
            return "/auth/o/token/"
        case .myAccount:
            return "/my/account"
        }
    }

    var method: HTTPMethod {
        switch self {
        case .login, .reauth:
            return .post
        case .myAccount:
            return .get
        }
    }

    var headers: HTTPHeaders? {
        // Example: Return nil or specific headers as needed
        return nil
    }

    var body: BodyEncoder? {
        switch self {
        case .login(let model), .reauth(let model):
            return BodyEncoder(value: model)
        case .myAccount:
            return nil
        }
    }

    var contentType: ContentType {
        switch self {
        case .login, .reauth:
            return .formData
        case .myAccount:
            return .json
        }
    }

    var authorized: Bool {
        switch self {
        case .login:
            return false
        case .reauth, .myAccount:
            return true
        }
    }
}

使用 execute 和 download 函数来发送 API 请求。 例如,要登录

let loginModel = LoginDataModel(username: "user@example.com", password: "password123")
QuickAuth.shared.execute(IdentityRequest.login(model: loginModel))
    .sink(receiveCompletion: { completion in
        // Handle completion
    }, receiveValue: { response in
        // Handle successful response
    })
    .store(in: &cancellables)

未来的文档和示例

我们正在不断努力改进 QuickAuth 及其文档。 未来将添加更详细的指南,包括高级用法、最佳实践和全面的示例项目。 这些更新将旨在帮助您更好地了解如何将 QuickAuth 无缝集成到您的应用程序中并充分利用其潜力。