整理router,删除多余中单件和路由。退出按键放最上方。

This commit is contained in:
2026-08-25 17:54:54 +08:00
parent 052803679a
commit 16ba817ecf
9 changed files with 70 additions and 141 deletions
+2 -2
View File
@@ -58,7 +58,7 @@ func AdminLoginView(c *gin.Context) {
}
// AdminView 后台管理页面:校验登录态后按角色用模板渲染菜单与页面框架
// 依赖 OptionalAuth 中间件注入 userID/role 等上下文
// 依赖 JWTAuth 中间件注入 userID/role 等上下文
func AdminView(c *gin.Context) {
userID, exists := c.Get("userID")
if !exists {
@@ -68,7 +68,7 @@ func AdminView(c *gin.Context) {
// 校验用户当前状态(禁用账号不允许进入后台)
var user models.User
if err := database.DB.First(&user, userID).Error; err != nil || user.Status == 0 || !user.IsActive {
if err := database.DB.First(&user, userID).Error; err != nil || user.Status == 0 {
c.Redirect(http.StatusFound, "/admin/login")
return
}
+3 -25
View File
@@ -73,14 +73,6 @@ type LoginRequest struct {
Password string `json:"password" binding:"required"`
}
// 注册请求
type RegisterRequest struct {
Username string `json:"username" binding:"required,min=3,max=50"`
Password string `json:"password" binding:"required,min=6"`
Nickname string `json:"nickname"`
Email string `json:"email" binding:"required,email"`
}
// JWT Claims
type Claims struct {
UserID uint `json:"user_id"`
@@ -103,7 +95,7 @@ func Login(c *gin.Context) {
return
}
if user.Status == 0 || !user.IsActive {
if user.Status == 0 {
c.JSON(http.StatusForbidden, gin.H{"error": "账号已被禁用"})
return
}
@@ -137,24 +129,10 @@ func Login(c *gin.Context) {
return
}
// 同时写入 Cookie,供服务端渲染后台页面时识别登录态
// 写入 Cookie,供服务端渲染后台页面时识别登录态
c.SetCookie("token", tokenString, 7*24*3600, "/", "", false, true)
c.JSON(http.StatusOK, gin.H{
"token": tokenString,
"user": gin.H{
"id": user.ID,
"username": user.Username,
"nickname": user.Nickname,
"email": user.Email,
"role": user.Role,
"avatar": user.Avatar,
"last_login_at": user.LastLoginAt,
"login_count": user.LoginCount,
},
// 菜单由登录接口根据角色返回
"menus": GetMenusByRole(user.Role),
})
c.JSON(http.StatusOK, gin.H{"message": "登录成功"})
}
// 退出登录(清除服务端 Cookie)
+1 -7
View File
@@ -92,11 +92,6 @@ func CreateUser(c *gin.Context) {
return
}
role := req.Role
if role != "admin" {
role = "user"
}
status := 1
if req.Status != nil {
status = *req.Status
@@ -106,9 +101,8 @@ func CreateUser(c *gin.Context) {
Username: req.Username,
Nickname: req.Nickname,
Email: req.Email,
Role: role,
Role: req.Role,
Status: status,
IsActive: true,
}
if err := user.SetPassword(req.Password); err != nil {
+14 -4
View File
@@ -8,9 +8,11 @@ import (
"goblog/config"
"goblog/database"
"goblog/handlers/backend"
"goblog/models"
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt/v5"
"gorm.io/gorm"
)
@@ -54,12 +56,20 @@ func loadSidebarData() (categories []models.Category, tags []models.Tag, postCou
// loginInfo 从上下文提取登录态信息(供侧边栏系统菜单区分已登录/未登录)
func loginInfo(c *gin.Context) (isLoggedIn bool, loginName string) {
if _, ok := c.Get("userID"); !ok {
tokenString, _ := c.Cookie("token")
if tokenString == "" {
return false, ""
}
name, _ := c.Get("username")
loginName, _ = name.(string)
return true, loginName
claims := &backend.Claims{}
token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) {
return backend.JWTSecret(), nil
})
if err == nil && token.Valid {
return true, claims.Username
}
return false, ""
}
// 首页数据结构