Vapor DynamoDB 会话

Language Language Build Status Code Coverage MIT License

一个简单的库,使用 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 功能来自动删除过期的会话数据并清理数据库。