- AdminAuth 中间件:GET 页面请求未登录时返回 login 页,API 请求仍返回 401 - 新增 Login.js 登录页组件(密码输入 + 登录后跳回原页面) - index.html 注册 login 页面路由
This commit is contained in:
@@ -104,6 +104,7 @@ func Auth() gin.HandlerFunc {
|
||||
}
|
||||
|
||||
// AdminAuth 管理员认证中间件:要求携带 role=admin 的 JWT(Authorization 头或 HttpOnly Cookie)
|
||||
// 浏览器导航(GET 页面请求)未登录时渲染登录页;API 请求未登录时返回 401 JSON
|
||||
func AdminAuth() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
tokenString := ""
|
||||
@@ -115,18 +116,24 @@ func AdminAuth() gin.HandlerFunc {
|
||||
tokenString, _ = c.Cookie(service.AdminTokenCookie)
|
||||
}
|
||||
|
||||
if tokenString == "" {
|
||||
c.JSON(http.StatusUnauthorized, gin.H{
|
||||
"code": 401,
|
||||
"msg": "需要管理员权限",
|
||||
})
|
||||
c.Abort()
|
||||
return
|
||||
authed := false
|
||||
if tokenString != "" {
|
||||
cfg := config.Load()
|
||||
userService := service.NewUserService()
|
||||
authed = userService.IsAdminToken(tokenString, cfg.JWT.Secret)
|
||||
}
|
||||
|
||||
cfg := config.Load()
|
||||
userService := service.NewUserService()
|
||||
if !userService.IsAdminToken(tokenString, cfg.JWT.Secret) {
|
||||
if !authed {
|
||||
// 页面导航(GET 且非 /admin/api/):返回登录页
|
||||
if c.Request.Method == http.MethodGet && !strings.HasPrefix(c.Request.URL.Path, "/admin/api/") {
|
||||
c.HTML(http.StatusOK, "index.html", gin.H{
|
||||
"title": "管理员登录",
|
||||
"page": "login",
|
||||
"url": c.Request.URL.Path,
|
||||
})
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusUnauthorized, gin.H{
|
||||
"code": 401,
|
||||
"msg": "需要管理员权限",
|
||||
|
||||
Reference in New Issue
Block a user