用于 Credentials 框架的插件,使用 Facebook 进行身份验证。
用于 Kitura-Credentials 框架的插件,使用 Facebook Web 登录(基于 OAuth)和一个通过移动应用程序或基于 Kitura 后端的其他客户端获取的 Facebook OAuth 令牌来进行身份验证。
最新版本的 Kitura-CredentialsFacebook 需要 Swift 4.0 或更高版本。 您可以通过此链接下载此版本的 Swift 二进制文件。 不保证与其他 Swift 版本的兼容性。
将 Kitura-CredentialsFacebook
和 Credentials
包添加到应用程序的 Package.swift
文件中的依赖项中。 将 "x.x.x"
替换为最新的 Kitura-CredentialsFacebook
版本和最新的 Kitura-Credentials
版本。
.package(url: "https://github.com/Kitura/Kitura-Credentials.git", from: "x.x.x")
.package(url: "https://github.com/Kitura/Kitura-CredentialsFacebook.git", from: "x.x.x")
将 CredentialsFacebook
和 Credentials
添加到目标的依赖项中
.target(name: "example", dependencies: ["CredentialsFacebook", "Credentials"]),
import Credentials
import CredentialsFacebook
完整的示例可以在 Kitura-Sample 中找到。
首先设置会话
import KituraSession
router.all(middleware: Session(secret: "Very very secret..."))
创建 CredentialsFacebook
插件的实例,并将其注册到 Credentials
框架
import Credentials
import CredentialsFacebook
let credentials = Credentials()
let fbCredentials = CredentialsFacebook(clientId: fbClientId,
clientSecret: fbClientSecret,
callbackUrl: serverUrl + "/login/facebook/callback",
options: options)
credentials.register(fbCredentials)
其中
CredentialsFacebookOptions
中列出注意: 上面的 callbackUrl 参数用于告诉 Facebook Web 登录页面,登录成功后应将用户的浏览器重定向到哪里。 它应该是您正在编写的服务器处理的 URL。 指定将未验证的请求重定向到哪里
credentials.options["failureRedirect"] = "/login/facebook"
将 credentials
中间件连接到对 /private
的请求
router.all("/private", middleware: credentials)
router.get("/private/data", handler:
{ request, response, next in
...
next()
})
并调用 authenticate
以使用 Facebook 登录,并在成功登录后处理来自 Facebook 登录网页的重定向(回调)
router.get("/login/facebook",
handler: credentials.authenticate(fbCredentials.name))
router.get("/login/facebook/callback",
handler: credentials.authenticate(fbCredentials.name))
此示例演示如何使用 CredentialsFacebookToken
插件来验证 post 请求,它显示了所涉及的请求的服务器端和客户端。
首先创建 Credentials
的实例和 CredentialsFacebookToken
插件的实例
import Credentials
import CredentialsFacebook
let credentials = Credentials()
let fbCredentials = CredentialsFacebookToken(options: options)
其中
CredentialsFacebookOptions
中列出。现在注册插件
credentials.register(fbCredentials)
将 credentials
中间件连接到 post 请求
router.post("/collection/:new", middleware: credentials)
如果身份验证成功,则 request.userProfile
将包含从 Facebook 收到的用户个人资料信息
router.post("/collection/:new") {request, response, next in
...
let profile = request.userProfile
let userId = profile.id
let userName = profile.displayName
...
next()
}
客户端需要在请求的 access_token
HTTP 标头字段中放置 Facebook 访问令牌,并在 X-token-type
字段中放置 "FacebookToken"
let urlRequest = NSMutableURLRequest(URL: NSURL(string: "http://\(serverUrl)/collection/\(name)"))
urlRequest.HTTPMethod = "POST"
urlRequest.HTTPBody = ...
urlRequest.addValue(FBSDKAccessToken.currentAccessToken().tokenString, forHTTPHeaderField: "access_token")
urlRequest.addValue("FacebookToken", forHTTPHeaderField: "X-token-type")
Alamofire.request(urlRequest).responseJSON {response in
...
}
有关更多信息,请访问我们的 API 参考。
我们喜欢讨论服务器端 Swift 和 Kitura。 加入我们的 Slack 来认识团队!
此库在 Apache 2.0 许可下获得许可。 完整的许可文本可在 LICENSE 中找到。