Kitura

APIDoc Build Status - Master macOS Linux Apache 2 Slack Status

Kitura-CredentialsFacebook

用于 Credentials 框架的插件,使用 Facebook 进行身份验证。

摘要

用于 Kitura-Credentials 框架的插件,使用 Facebook Web 登录(基于 OAuth)和一个通过移动应用程序或基于 Kitura 后端的其他客户端获取的 Facebook OAuth 令牌来进行身份验证。

Swift 版本

最新版本的 Kitura-CredentialsFacebook 需要 Swift 4.0 或更高版本。 您可以通过此链接下载此版本的 Swift 二进制文件。 不保证与其他 Swift 版本的兼容性。

用法

添加依赖项

Kitura-CredentialsFacebookCredentials 包添加到应用程序的 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")

CredentialsFacebookCredentials 添加到目标的依赖项中

.target(name: "example", dependencies: ["CredentialsFacebook", "Credentials"]),

导入包

import Credentials
import CredentialsFacebook

Facebook Web 登录示例

完整的示例可以在 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)

其中

注意: 上面的 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))

使用 Facebook OAuth 令牌进行身份验证的示例

此示例演示如何使用 CredentialsFacebookToken 插件来验证 post 请求,它显示了所涉及的请求的服务器端和客户端。

服务器端

首先创建 Credentials 的实例和 CredentialsFacebookToken 插件的实例

import Credentials
import CredentialsFacebook

let credentials = Credentials()
let fbCredentials = CredentialsFacebookToken(options: options)

其中

现在注册插件

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 文档

有关更多信息,请访问我们的 API 参考

社区

我们喜欢讨论服务器端 Swift 和 Kitura。 加入我们的 Slack 来认识团队!

许可

此库在 Apache 2.0 许可下获得许可。 完整的许可文本可在 LICENSE 中找到。