QuickAuth是一个为Swift应用程序设计的简单OAuth2身份验证库。它处理所有授权和非授权的网络请求,利用访问和刷新令牌进行身份验证。QuickAuth通过在库侧避免存储敏感信息,而委托给客户端应用程序来强调安全性。重要的是,QuickAuth基于Combine框架构建,为Swift中的异步编程提供了一种现代方法。
- 自动处理OAuth2身份验证和重新身份验证
- 支持数据获取和文件下载。
- 通过应用程序端自定义日志记录
- 安全令牌处理,不存储库中的敏感信息
首先,在您的应用程序中初始化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: "[email protected]", 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集成到您的应用程序中,并充分利用其全部功能。