1

我正在研究 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)
    }
}

现在,我试图找出在哪里存储会话数据和 ID 以供以后使用,并在x一段时间后可能会破坏。
我已经阅读了有关授权和会话的 Vapor 文档,但找不到适合我需要的东西,或者至少不是我可以直观地实现的方式,因为我的后端编程经验不是很好。
我将如何实施这样的会话?我在哪里存储凭据以及以后如何访问它们?
提前非常感谢!

4

1 回答 1

2

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

 struct SessionTimeoutMiddleware: Middleware {
     func respond(to request: Request, chainingTo next: Responder) -> EventLoopFuture<Response> {
         let lastRequestTimeStamp = Double(request.session.data["lastRequest"] ?? "BAD") ?? Date().timeIntervalSince1970
         request.session.data[C.Dict.Key.LastRequest] = String(Date().timeIntervalSince1970)
         if Date().timeIntervalSince1970 - lastRequestTimeStamp > 1200 { 
             request.auth.logout(User.self)
             return request.eventLoop.makeSucceededFuture(request.redirect(to: "/"))
         }
         return next.respond(to: request)
     }
 }

最后,将中间件注册到configure.swift.

app.middleware.use(InternalErrorMiddleware())

于 2021-02-10T12:37:50.183 回答