Add NodesSSO to the package dependencies (in your Package.swift file):
dependencies: [
...,
.package(url: "https://github.com/nodes-vapor/nodes-sso.git", from: "1.0.0")
]as well as to your target (e.g. "App"):
targets: [
...
.target(
name: "App",
dependencies: [... "NodesSSO" ...]
),
...
]Copy the NodesSSO folders from Resources/Views and Public from this repo and paste them into your project into the same directories. You can download this repo as a zip and then move the files into the mentioned directories.
First make sure that you've imported NodesSSO everywhere it's needed:
import NodesSSOpublic func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws {
try services.register(NodesSSOProvider<MyNodesSSOAuthenticatableUser>(config: NodesSSOConfig(
projectURL: "https://myproject.com",
redirectURL: "https://url-for-sso.com",
salt: "MY-SECRET-HASH-FOR-SSO",
environment: env
)))
}There are also parameters for setting the routes that should enable SSO in your project. Have a look at the signature of NodesSSOConfig for more information.
Make sure to add the relevant Nodes SSO routes, e.g. in your configure.swift or routes.swift:
services.register(Router.self) { container -> EngineRouter in
let router = EngineRouter.default()
try router.useNodesSSORoutes(MyNodesSSOAuthenticatableUser.self, on: container)
return router
}In order to render embed the SSO button, you will need to add the NodesSSO Leaf tag:
public func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws {
services.register { _ -> LeafTagConfig in
var tags = LeafTagConfig.default()
tags.useNodesSSOLeafTags()
return tags
}
}On the page you want the NodesSSO button to appear, embed the sso-button leaf file:
#embed("NodesSSO/sso-button")
The NodesSSOProvider is generic and requires a type that conforms to NodesSSOAuthenticatable. This protocol has one method that gets called when the SSO has finnished successfully:
public static func authenticated(_ user: AuthenticatedUser, req: Request) -> Future<Response>Given this AuthenticatedUser the implementer can then look up the email and create the user if it doesn't exist, or if it does, log the user in automatically.
This package is developed and maintained by the Vapor team at Nodes.
This package is open-sourced software licensed under the MIT license