基于PostgreSQL数据库为驱动的服务器端用户身份验证函数库
请参考如下链接的模板应用程序:https://github.com/PerfectlySoft/Perfect-Local-Auth-PostgreSQL-Template,内容为完整的函数使用方法展示。
欲使用本函数库,请选择如下适当的模块并追加到您项目的Package.swift文件中去。
.Package(url: "https://github.com/PerfectlySoft/Perfect-LocalAuthentication-PostgreSQL.git", majorVersion: 1)
具体使用之前,请务必做好模块配置工作(以下例子假设您使用main.swift作为程序入口)。首先导入函数库:
import PerfectSession
import PerfectSessionPostgreSQL
import PerfectCrypto
import LocalAuthentication
然后请初始化 PerfectCrypto 加密函数库:
let _ = PerfectCrypto.isInitialized
设置默认选项:
// 以下配置在电子邮件系统中会用上。
// 请设置链接到您自己系统主页的基本地址,比如 http://www.example.com/
var baseURL = ""
// 配置会话过程
SessionConfig.name = "perfectSession" // <-- 请自行设定名称
SessionConfig.idle = 86400
SessionConfig.cookieDomain = "localhost" //<-- 请自行设定主机名
SessionConfig.IPAddressLock = false
SessionConfig.userAgentLock = false
SessionConfig.CSRF.checkState = true
SessionConfig.CORS.enabled = true
SessionConfig.cookieSameSite = .lax
详细的会话过程文档请参考 https://www.perfect.org/docs/sessions_zh_CN.html
数据库和电邮配置方法参考如下(假设您使用JSON进行配置):
let opts = initializeSchema("./config/ApplicationConfiguration.json") // <-- 该JSON文件包含数据库和邮件配置信息
httpPort = opts["httpPort"] as? Int ?? httpPort
baseURL = opts["baseURL"] as? String ?? baseURL
否则,请使用下列函数完成等价的配置:
let sessionDriver = SessionPostgresDriver()
下列两个会话过滤器需要追加到您服务器的配置中:
// (where filter is a [[String: Any]] object)
filters.append(["type":"request","priority":"high","name":SessionPostgresFilter.filterAPIRequest])
filters.append(["type":"response","priority":"high","name":SessionPostgresFilter.filterAPIResponse])
请将下列函数句柄追加到服务器路由,用于实现注册、登录和注销命令。
// Login
routes.append(["method":"get", "uri":"/login", "handler":Handlers.login]) // simply a serving of the login GET
routes.append(["method":"post", "uri":"/login", "handler":LocalAuthWebHandlers.login])
routes.append(["method":"get", "uri":"/logout", "handler":LocalAuthWebHandlers.logout])
// Register
routes.append(["method":"get", "uri":"/register", "handler":LocalAuthWebHandlers.register])
routes.append(["method":"post", "uri":"/register", "handler":LocalAuthWebHandlers.registerPost])
routes.append(["method":"get", "uri":"/verifyAccount/{passvalidation}", "handler":LocalAuthWebHandlers.registerVerify])
routes.append(["method":"post", "uri":"/registrationCompletion", "handler":LocalAuthWebHandlers.registerCompletion])
// JSON
routes.append(["method":"get", "uri":"/api/v1/session", "handler":LocalAuthJSONHandlers.session])
routes.append(["method":"get", "uri":"/api/v1/logout", "handler":LocalAuthJSONHandlers.logout])
routes.append(["method":"post", "uri":"/api/v1/register", "handler":LocalAuthJSONHandlers.register])
routes.append(["method":"login", "uri":"/api/v1/login", "handler":LocalAuthJSONHandlers.login])
如果配置成功,您可以通过下列方式获取用户身份编号:
request.session?.userid ?? ""
如果在具体页面实现中需要用户处于登录状态,您可以用下列代码测试用户是否登录;如果没有登录则自动调用登录过程:
let contextAuthenticated = !(request.session?.userid ?? "").isEmpty
if !contextAuthenticated { response.redirect(path: "/login") }
我们目前正在过渡到使用JIRA来处理所有源代码资源合并申请、修复漏洞以及其它有关问题。因此,GitHub 的“issues”问题报告功能已经被禁用了。
如果您发现了问题,或者希望为改进本文提供意见和建议,请在这里指出.
在您开始之前,请参阅目前待解决的问题清单.
关于本项目更多内容,请参考perfect.org.