一个简单的库,使用 Soto 与 DynamoDB 结合,为 Vapor 提供会话支持。
在 Package.swift 中的 dependencies 数组中添加该库
dependencies: [
// ...,
package(name: "VaporDynamoDBSessions", url: "https://github.com/brokenhandsio/vapor-dynamodb-sessions.git", from: "1.0.0"),
],
同时确保将其添加为你的 target 的依赖项
targets: [
.target(name: "App", dependencies: [
.product(name: "Vapor", package: "vapor"),
// ...,
.product(name: "VaporDynamoDBSessions", package: "VaporDynamoDBSessions")
]),
// ...
]
首先,你必须使用 AWSClient
和表名来配置 DynamoDBSessionsProvider
。在 configure.swift 中设置应用程序的 provider
app.dynamoDBSessions.provider = DynamoDBSessionsProvider(client: app.aws.client, tableName: tableName)
如果需要配置 AWS region
和 endpoint,DynamoDBSessionsProvider
也可以接受可选的 AWS region
和 endpoint。要了解如何配置 AWSClient
,请参阅 Soto 文档。
接下来,告诉 Vapor 使用 DynamoDB 来管理会话
app.sessions.use(.dynamodb)
app.middleware.use(app.sessions.middleware)
注意: 你必须在添加 SessionsMiddleware
之前,将 DynamoDB 设置为 SessionDriver
。
VaporDynamoDBSessions
可以使用自己的表,也可以作为使用 单表设计 的应用程序的一部分工作。该库工作的唯一要求是该表必须有一个名为 pk
的分区键和一个名为 sk
的排序键。
VaporDynamoDBSessions
支持为会话添加过期日期。任何已过期的会话都将被驱动程序丢弃。要配置此项,请在配置 provider 时传递会话持续时间
// 30 days
let sessionLength: TimeInterval = 60 * 60 * 24 * 30
app.dynamoDBSessions.provider = DynamoDBSessionsProvider(client: app.aws.client, tableName: tableName, region: .useast1, endpoint: dynamoDBEndpoint, sessionLength: sessionLength)
这会将一个字段添加到会话记录中,该字段的键为 expiryDate
,值为 epoch 时间的 number
。这允许你使用 DynamoDB 的 TTL 功能来自动删除过期的会话数据并清理数据库。