🔐 Vapor 的 OAuth 提供商的联合身份验证。
使用 SPM 字符串轻松地在您的 Package.swift
文件中包含依赖项
.package(url: "https://github.com/vapor-community/Imperial.git", from: "2.0.0-beta.2")
然后将所需的提供商添加到您的目标的依赖项中
.product(name: "ImperialGitHub", package: "imperial")
Imperial 是一项联合登录服务,允许您轻松地将您的 Vapor 应用程序与 OAuth 提供商集成,以处理您应用程序的身份验证。
Imperial 依赖于 会话中间件 来保存状态和访问令牌。 在 configure.swift 中,或作为特定路由的路由组,添加会话中间件。 例如,要全局添加它
app.middleware.use(app.sessions.middleware)
Imperial 使用环境变量来访问客户端 ID 和密钥,以与提供商进行身份验证。 有关它们应该是什么的详细信息,请参阅提供商特定的文档。
您需要向您的路由注册 OAuth 服务。 例如,要注册 GitHub 集成,请添加以下内容
try routes.oAuth(from: GitHub.self, authenticate: "github", callback: "gh-auth-complete") { req, token in
print(token)
return req.redirect(to: "/")
}
这会注册一个到 /github
的路由。 当您访问该路由时,Imperial 将使用 GitHub
服务触发 OAuth 流程。 回调路径是您创建应用程序时向 OAuth 提供商注册的路径。 当回调路由被 OAuth 提供商调用时,将触发完成处理程序。 访问令牌被传入并返回响应。
如果您只想重定向,而无需在回调中执行任何其他操作,则可以使用辅助方法 RoutesBuilder/oAuth(from:authenticate:authenticateCallback:callback:scope:redirect:)
,该方法接受重定向字符串
try router.oAuth(from: GitHub.self, authenticate: "github", callback: "gh-auth-complete", redirect: "/")
如果您想在路由中获取 access_token
,则可以使用 Imperial 附带的 Request
类型的辅助方法
let token = try request.accessToken
现在您正在验证用户身份,您将需要保护某些路由以确保用户已通过身份验证。 您可以通过将 ImperialMiddleware
添加到路由器组(或者可能是您的中间件配置)来做到这一点
let protected = routes.grouped(ImperialMiddleware())
然后,将您受保护的路由添加到 protected
组
protected.get("me", use: me)
默认情况下,ImperialMiddleware
将其发现的错误传递给 ErrorMiddleware
以进行捕获,但是您可以使用重定向路径对其进行初始化,以便在用户未通过身份验证时跳转到该路径
let protected = routes.grouped(ImperialMiddleware(redirect: "/"))