Swift Vapor-创建ID为的房间会话

Swift Vapor-创建ID为的房间会话,swift,vapor,server-side-swift,Swift,Vapor,Server Side Swift,我正在Vapor后端上工作,希望为单个条目创建会话。客户端应请求创建会话,后端将返回客户端可以使用的会话ID。 以下是大纲: // routes.swift func routes(_ app: App) throws { app.post("create_room") { req -> BaseResponse<CreateRoomResponse> in let roomName = try req.content.decode

我正在Vapor后端上工作,希望为单个条目创建会话。客户端应请求创建会话,后端将返回客户端可以使用的会话ID。
以下是大纲:

// routes.swift

func routes(_ app: App) throws {
    app.post("create_room") { req -> BaseResponse<CreateRoomResponse> in
        let roomName = try req.content.decode(CreateRoomRequest.self).name
        let roomId = "ABCD"
        
        // Create a session, store credentials...
        ...

        return CreateRoomResponse(status: .ok, payload: roomId)
    }
}
//routes.swift
func路由(uApp:app)抛出{
app.post(“create_room”){req->BaseResponse
让roomName=try req.content.decode(CreateRoomRequest.self).name
让roomId=“ABCD”
//创建会话、存储凭据。。。
...
返回CreateRoomResponse(状态:.ok,有效负载:roomId)
}
}
现在,我正试图找出将会话数据和ID存储在何处,以备以后使用,并在
x
一段时间后可能被销毁。
我已经阅读了有关授权和会话的Vapor文档,但没有找到完全符合我需要的内容,或者至少没有以我直观的方式实现,因为我在后端编程方面的经验不太好。
我将如何实现这样的会话?我在哪里存储凭据,以及以后如何访问凭据?

提前多谢

这将销毁会话和存储在
会话.data
中的所有数据。如果是会话中的第一个请求,则初始化
lastRequestTimeStamp
失败,并默认为当前时间。然后将当前时间存储在会话数据中。如果请求距离上次请求超过20分钟,则会注销用户(这会破坏会话)并重新定向到“/”

struct SessionTimeoutMiddleware:中间件{
func respond(to request:request,chainingTo next:Responder)->EventLoopFuture{
让lastRequestTimeStamp=Double(request.session.data[“lastRequest”]?“BAD”)?Date().TimeIntervalence1970
request.session.data[C.Dict.Key.LastRequest]=字符串(Date().timeintervalnce1970)
如果Date().timeIntervalSince1970-lastRequestTimeStamp>1200{
request.auth.logout(User.self)
return request.eventLoop.makeSucceededFuture(request.redirect(到“/”))
}
返回下一个。响应(回复:请求)
}
}
最后,在
configure.swift
中注册中间件


app.middleware.use(InternalErrorMiddleware())

我将数据存储在会话数据字典中。通常,这会持续到会话结束,正如您所期望的那样。但是,我也使用了一个自定义中间件,它在指定的时间段后注销会话。这能满足你的需要吗?@Nick是的,这正是我需要的。我设法弄明白了如何在
会话.data
中存储数据,但如果您能给我举一个例子,说明如何在指定时间段后使用您提到的自定义中间件销毁会话,我将不胜感激。非常感谢。