增加admin相关页面

This commit is contained in:
张超
2025-06-09 17:59:19 +08:00
parent c273584189
commit 7913a2b381
19 changed files with 345 additions and 532 deletions

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"go_blog/controllers"
"go_blog/models"
"go_blog/pkg/jwt"
"go_blog/serializers"
"go_blog/themes" // <-- 确保导入 themes 包
"log"
@@ -15,6 +16,31 @@ import (
"gorm.io/gorm"
)
// 新增:自定义后台认证中间件(处理页面重定向)
func CheckAdminAuth() gin.HandlerFunc {
return func(c *gin.Context) {
currentPath := c.Request.URL.Path
user, _ := c.Get("user") // 从jwt中间件获取用户信息
// 已登录状态访问登录/注册页:重定向到后台首页
if (currentPath == "/admin/login" || currentPath == "/admin/register") && user != nil {
c.Redirect(http.StatusFound, "/admin/index")
c.Abort()
return
}
// 未登录状态访问非登录/注册页:重定向到登录页
if (currentPath != "/admin/login" && currentPath != "/admin/register") && user == nil {
c.Redirect(http.StatusFound, "/admin/login")
c.Abort()
return
}
c.Next()
}
}
func RegisterRoutes(r *gin.Engine) {
// 注册WebSocket路由
@@ -106,34 +132,34 @@ func RegisterRoutes(r *gin.Engine) {
r.GET("/ws", controllers.WebSocketHandler)
r.POST("/content", controllers.CreateContentHandler)
r.POST("/login", controllers.UsersLoginHandler)
r.POST("/register", controllers.UsersRegisterHandler)
r.POST("/setinfo", controllers.UsersSetInfoHandler)
r.POST("/setpwd", controllers.UsersSetPwdHandler)
// Frontend routes (dynamic themes)
r.GET("/", controllers.Home)
r.GET("/post/:id", controllers.ShowPost)
// Admin panel取消注释并完善
admin := r.Group("/admin", jwt.AuthRequired()) // 新增中间件
admin := r.Group("/admin")
admin.Use(CheckAdminAuth()) // 使用自定义重定向中间件
{
admin.GET("/themes", controllers.ListThemes)
admin.POST("/themes/switch", controllers.SwitchTheme)
// 无需认证的公开路由(登录/注册)
admin.GET("/login", controllers.ShowLoginPage)
admin.GET("/register", controllers.ShowRegisterPage)
admin.POST("/login", controllers.UsersLoginHandler)
admin.POST("/register", controllers.UsersRegisterHandler)
// 需要认证的路由组使用jwt中间件验证令牌
authAdmin := admin.Group("", jwt.AuthRequired())
{
authAdmin.GET("/index", controllers.ShowAdminIndexPage) // 后台首页
authAdmin.GET("/themes", controllers.ListThemes) // 主题列表
authAdmin.GET("/themes/switch", controllers.ShowThemeSwitchPage) // 新增:主题切换页面
authAdmin.POST("/themes/switch", controllers.SwitchTheme) // 原有:处理主题切换提交
authAdmin.POST("/setinfo", controllers.UsersSetInfoHandler)
authAdmin.POST("/setpwd", controllers.UsersSetPwdHandler)
}
}
// Static files for themes
r.StaticFS("/themes", http.Dir("web/themes"))
}
func getUserInfo() models.User {
user := models.User{
Name: "user",
Gender: "male",
Age: 18,
Password: "nothings",
PasswordHash: []byte("nothings"),
}
return user
}
func esSSE(c *gin.Context) {
w := c.Writer
@@ -156,9 +182,8 @@ func esSSE(c *gin.Context) {
time.Sleep(1 * time.Second)
}
_, err := fmt.Fprintf(w, "id: aaa\ndata: %s\n\n", "dsdf")
_, er1r := fmt.Fprintf(w, "event: connecttime\ndata: %s\n\n", "connecttime")
if err != nil || er1r != nil {
_, err := fmt.Fprintf(w, "event: connecttime\ndata: %s\n\n", "connecttime")
if err != nil {
print("error", err)
return
}