QuickAuth 是一个为 Swift 应用程序设计的简单 OAuth2 认证库。 它处理所有已授权和未授权的网络请求,利用访问令牌和刷新令牌进行身份验证。 QuickAuth 强调安全性,避免在库端存储敏感信息,而是将此责任委托给客户端应用程序。 重要的是,QuickAuth 构建于 Combine 框架之上,为 Swift 中的异步编程提供了一种现代化的方法。
首先,在您的应用程序中初始化 QuickAuth,通常在您的 AppDelegate 或 SceneDelegate 中
QuickAuth.shared.setDataSource(dataSource: NetworkManager.shared)
QuickAuth.shared.setDelegate(delegate: NetworkManager.shared)
在您的网络管理器或等效类中实现 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 无缝集成到您的应用程序中并充分利用其潜力。