为Swift提供可插拔的HTTP身份验证。
优点
注意事项
当您使用OAuth提供商注册应用时,您将提供一个重定向URI。此URI必须使用在您的应用的Info.plist
中注册的URL方案。
Superb允许您的应用通过注册机制支持多个身份验证提供者。iOS应用有单个URL入口点,因此Superb会在注册提供者中查找处理重定向URI的正确提供者。
// GitHub+Providers.swift
import Superb
import SuperbGitHub
extension GitHubOAuthProvider {
static var shared: GitHubOAuthProvider {
// Register a provider to handle callback URLs
return Superb.register(
GitHubOAuthProvider(
clientId: "<your client id>",
clientSecret: "<your client secret>",
redirectURI: URL(string: "<your chosen redirect URI>")!
)
)
}
}
// AppDelegate.swift
@UIApplicationMain
final class AppDelegate: UIResponder, UIApplicationDelegate {
// ...
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey: Any]) -> Bool {
// Pass the URL and options off to Superb.
return Superb.handleAuthenticationRedirect(url, options: options)
}
}
然后,在我们的API客户端中,我们可以使用RequestAuthorizer
来绕过必须进行身份验证才能运行的代码,使用RequestAuthorizer.performAuthorized()
。
// GitHubAPIClient.swift
struct GitHubAPIClient {
static let oauthClient = GitHubAPIClient(
requestAuthorizer: RequestAuthorizer(
authorizationProvider: GitHubOAuthProvider.shared
)
)
private let authorizer: RequestAuthorizerProtocol
init(requestAuthorizer: RequestAuthorizerProtocol) {
authorizer = requestAuthorizer
}
// An authorized request to get the current user's profile.
func getProfile(completionHandler: @escaping (Result<Profile, SuperbError>) -> Void) {
let request = URLRequest(url: URL(string: "https://api.github.com/user")!)
authorizer.performAuthorized(request) { result in
switch result {
case let .success(data, _):
let profile = parseProfile(from: data)
completionHandler(.success(profile))
case let .failure(error):
completionHandler(.failure(error))
}
}
}
// An unauthorized request.
func getZen(completionHandler: @escaping (Result<String, SuperbError>) -> Void) {
let request = URLRequest(url: URL(string: "https://api.github.com/zen")!)
URLSession.shared.dataTask(with: request) { data, _, error in
let result = parseZen(data, error)
completionHandler(result)
}.resume()
}
}
// later
let api = GitHubAPIClient.oauthClient
api.getProfile { result in
// ...
}
Superb.register
。如果您不调用Superb.register
,则身份验证提供者将没有机会接收回调URL。
查看CONTRIBUTING文档。感谢贡献者!
Superb 版权所有(C)2017 thoughtbot,inc。它是一款免费软件,可以在LICENSE 文件中规定的条款下重新分发。
Superb 由 thoughtbot,inc 维护和资助。thoughtbot 的名称和标志是 thoughtbot,inc 的商标。