SwiftyOAuth 是一个 小巧 的 OAuth 库,内置了一系列提供程序和方便的 API,以便添加您自己的提供程序。
let instagram: Provider = .instagram(clientID: "***", redirectURL: "foo://callback")
instagram.authorize { result in
print(result) // success(Token(accessToken: "abc123"))
}
使用
提供程序
步骤 1:创建一个提供程序
使用您定义的自定义 URL 方案初始化提供程序
// Provider using the server-side (explicit) flow
let provider = Provider(
clientID: "***",
clientSecret: "***",
authorizeURL: "https://example.com/authorize",
tokenURL: "https://example.com/authorize/token",
redirectURL: "foo://callback"
)
// Provider using the client-side (implicit) flow
let provider = Provider(
clientID: "***",
authorizeURL: "https://example.com/authorize",
redirectURL: "foo://callback"
)
// Provider using the client-credentials flow
let provider = Provider(
clientID: "***",
clientSecret: "***"
)
或者,您可以使用内置的提供程序之一
let github = .gitHub(
clientID: "***",
clientSecret: "***",
redirectURL: "foo://callback"
)
可选地设置 state
和 scopes
属性
github.state = "asdfjkl;" // An random string used to protect against CSRF attacks.
github.scopes = ["user", "repo"]
如果提供程序不支持自定义 URL 方案作为重定向 URL,请使用 WKWebView
let provider = Provider(
clientID: "***",
clientSecret: "***",
authorizeURL: "https://example.com/authorize",
tokenURL: "https://example.com/authorize/token",
redirectURL: "https://an-arbitrary-redirect-url/redirect"
)
provider.useWebView = true
使用 additionalAuthRequestParams
和 additionalTokenRequestParams
分别定义授权请求或令牌请求的附加参数
github.additionalAuthRequestParams["allow_signup"] = "false"
步骤 2:处理传入请求
在您的 AppDelegate
中处理传入的请求
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
github.handleURL(url, options: options)
return true
}
步骤 3:请求授权
最后,请求授权。SwiftyOAuth将显示一个SFSafariViewController
(iOS 9)或打开移动Safari。
github.authorize { (result: Result<Token, Error>) -> Void in
switch result {
case .success(let token): print(token)
case .failure(let error): print(error)
}
}
如果提供商提供了一个可过期token,您可能希望刷新它。
let uber: Provider = .uber(
clientID: "***",
clientSecret: "***",
redirectURL: "foo://callback/uber"
)
// uber.token!.isExpired => true
uber.refreshToken { result in
switch result {
case .success(let token): print(token)
case .failure(let error): print(error)
}
}
令牌
access_token
、token_type
、scopes
和与过期相关的信息作为Token
属性可用
token.accessToken // abc123
token.tokenType // .Bearer
token.scopes // ["user", "repo"]
token.expiresIn // 123
token.isExpired // false
token.isValid // true
此外,您可以通过dictionary
属性访问所有令牌数据
token.dictionary // ["access_token": "abc123", "token_type": "bearer", "scope": "user repo"]
令牌存储
每个Token
都通过一个遵守TokenStore
协议的对象进行存储和检索。
该库目前支持以下TokenStore
:
provider.tokenStore = Keychain.shared
Keychain
:在使用此TokenStore
之前,请确保已启用Keychain Sharing功能。
provider.tokenStore = UserDefault.standard
UserDefaults
:默认的TokenStore
。信息在本地保存,并在适当初始化的情况下保存在您的App Group中。
provider.tokenStore = NSUbiquitousKeyValueStore.default
NSUbiquitousKeyValueStore
:信息保存在iCloud Key Value Store中。在使用此TokenStore
之前,请确保您的项目已经按照此处所述正确配置。
错误
错误是一个符合ErrorType
协议的枚举。
-
cancel
用户通过关闭网页浏览器窗口取消授权过程。 -
applicationSuspended
您设置的OAuth应用程序已挂起。 -
redirectURIMismatch
提供的redirectURL
与您在应用程序中注册的不匹配。 -
accessDenied
用户拒绝访问您的应用程序。 -
invalidClient
您传递的clientID
和或clientSecret
是错误的。 -
invalidGrant
您传递的验证码是错误的、已过期,或与授权过程中第一次请求收到的验证码不匹配。 -
other
应用程序以{"error": "xxx", "error_description": "yyy"}
的形式发出了响应,但 SwiftyOAuth 没有为其提供枚举。数据可在相关值中找到。 -
unknown
应用程序发出的响应既不是成功响应({"access_token": "xxx"}
等)的形式,也不是失败响应({"error": "xxx"}
等)的形式。数据可在相关值中找到。 -
nsError
在进行网络请求或解析 JSON 时触发的错误。数据可在相关值中找到。
服务提供商
GitHub
- 文档Dribbble
- 文档Instagram
- 文档Uber
- 文档Feedly
- 文档Vimeo
- 文档SoundCloud
- 文档StackExchange
- 文档Medium
- 文档Foursquare
- 文档Stripe
- 文档Reddit
- 文档Weibo
- 文档Slack
- 文档Dropbox
- 文档Basecamp
- 文档Spotify
- 文档Meetup
- 文档Strava
- 文档Google
- 文档Stuart
- 文档UberRUSH
- 文档- 更多内容即将推出...
查看 维基页面 获取更多信息!
安装
Carthage
Carthage 是一个去中心化的依赖管理器,它自动处理将框架添加到您的 Cocoa 应用程序的过程。
您可以使用以下命令通过 Homebrew 安装 Carthage
$ brew update
$ brew install carthage
要使用 Carthage 将 SwiftyOAuth 集成到您的 Xcode 项目中,请在其 Cartfile
中指定它
github "delba/SwiftyOAuth" >= 1.1
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。
您可以使用以下命令安装它
$ gem install cocoapods
要使用 CocoaPods 将 SwiftyOAuth 集成到您的 Xcode 项目中,请在其 Podfile
中指定它
use_frameworks!
pod 'SwiftyOAuth', '~> 1.1'
许可
版权所有 (c) 2016-2019 Damien (http://delba.io)
在此特此授予任何获得本软件及其相关文档(“软件”)副本的任何人不受限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向软件提供的人士行使其权利,但受以下条件的约束
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
软件按“现状”提供,不提供任何形式的保证,明示或暗示,包括但不限于对适销性、特定用途适用性和版权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,不论是因为合同、侵权或其他方式引起的,包括但不限于使用或因使用软件或与软件的使用或其他交易而导致的损害。