Vapor - 使用 ID 创建房间 session
Vapor - Create a room session with ID
我正在开发 Vapor 后端,我希望为单项创建 sessions。客户端应要求创建 session,后端将 return 客户端可以使用的 session 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)
}
}
现在,我正试图弄清楚在哪里存储 session 数据和 ID 以备后用,并可能在 x
时间后销毁。
我已经阅读了关于授权和会话的 Vapor 文档,但找不到完全符合我需要的东西,或者至少不是我可以直观地实现的方式,因为我在后端编程方面的经验不是很好。
我将如何着手实施这样的 session ?我在哪里存储凭据以及以后如何访问它们?
非常感谢!
这应该会破坏会话和您存储在 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())
我正在开发 Vapor 后端,我希望为单项创建 sessions。客户端应要求创建 session,后端将 return 客户端可以使用的 session 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)
}
}
现在,我正试图弄清楚在哪里存储 session 数据和 ID 以备后用,并可能在 x
时间后销毁。
我已经阅读了关于授权和会话的 Vapor 文档,但找不到完全符合我需要的东西,或者至少不是我可以直观地实现的方式,因为我在后端编程方面的经验不是很好。
我将如何着手实施这样的 session ?我在哪里存储凭据以及以后如何访问它们?
非常感谢!
这应该会破坏会话和您存储在 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())