卓越 0.2.0

卓越 0.2.0

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布最新发布2017年8月
SwiftSwift版本3.1
SPM支持SPM

Adam Sharp维护。



卓越 0.2.0

  • Adam Sharp, Nick Charlton和thoughtbot团队

为Swift提供可插拔的HTTP身份验证。

优点

  • 安全,在iOS Keychain中存储安全令牌。
  • 自动处理401响应和重新认证
  • 以线程安全的方式扩展以处理多个并发请求。
  • 当您需要时保持简洁,使用简单的最小API。
  • 通过“尽可能推迟登录”促进Apple的身份验证指南
  • 支持任何数量身份验证提供者的适配器
  • 无需进行任何源代码修改或拉取请求即可扩展。

注意事项

  • 用户体验有偏好。

使用方法

示例:GitHub OAuth身份验证

当您使用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
  // ...
}

身份验证提供者列表

故障排除

使用OAuth时身份验证始终失败

您忘记了调用Superb.register

如果您不调用Superb.register,则身份验证提供者将没有机会接收回调URL。

贡献

查看CONTRIBUTING文档。感谢贡献者

许可协议

Superb 版权所有(C)2017 thoughtbot,inc。它是一款免费软件,可以在LICENSE 文件中规定的条款下重新分发。

关于

thoughtbot

Superb 由 thoughtbot,inc 维护和资助。thoughtbot 的名称和标志是 thoughtbot,inc 的商标。

我们热爱开源软件!请参见我们的其他项目,或查看我们的产品案例研究招聘我们来帮助您构建 iOS 应用。