会话/设备管理后端:user_sessions 会话表、JWT 加 sid 校验、按平台类限并发登录、 登录失败锁定、修复禁用账号仍可凭 refresh 续期漏洞、/auth/ping、/auth/logout、 GET /sessions、DELETE /sessions/:id(管理员强制下线)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,7 @@ func Setup(r *gin.Engine, db *gorm.DB) {
|
||||
|
||||
// 处理器
|
||||
authH := handler.NewAuthHandler(authSvc)
|
||||
sessionH := handler.NewSessionHandler(authSvc)
|
||||
licenseH := handler.NewLicenseHandler(licenseSvc)
|
||||
productH := handler.NewProductHandler(db)
|
||||
warehouseH := handler.NewWarehouseHandler(db)
|
||||
@@ -69,7 +70,17 @@ func Setup(r *gin.Engine, db *gorm.DB) {
|
||||
|
||||
// 需要 JWT 的基础路由组
|
||||
api := v1.Group("")
|
||||
api.Use(middleware.JWT())
|
||||
api.Use(middleware.JWT(db))
|
||||
|
||||
// 会话/在线状态(豁免 LicenseGuard:登出/心跳/在线列表在锁定期也要可用)
|
||||
{
|
||||
api.POST("/auth/logout", authH.Logout)
|
||||
api.POST("/auth/ping", authH.Ping)
|
||||
// 在线会话列表:所有登录用户只读
|
||||
api.GET("/sessions", sessionH.List)
|
||||
// 强制下线:仅 admin/superadmin
|
||||
api.DELETE("/sessions/:id", middleware.AdminOnly(), sessionH.ForceLogout)
|
||||
}
|
||||
|
||||
// 许可证路由:豁免 LicenseGuard(锁定时仍需查看状态和激活)
|
||||
license := api.Group("/license")
|
||||
|
||||
Reference in New Issue
Block a user