Files
soul-yongping/soul-api/internal/middleware/admin_auth.go

45 lines
1.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package middleware
import (
"net/http"
"soul-api/internal/auth"
"soul-api/internal/config"
"github.com/gin-gonic/gin"
)
const adminClaimsKey = "admin_claims"
// AdminAuth 管理端鉴权:校验 JWTAuthorization: Bearer 或 Cookie admin_session未登录返回 401通过则设置 admin_claims 到 context
func AdminAuth() gin.HandlerFunc {
return func(c *gin.Context) {
cfg := config.Get()
if cfg == nil {
c.Next()
return
}
token := auth.GetAdminJWTFromRequest(c.Request)
claims, ok := auth.ParseAdminJWT(token, cfg.AdminSessionSecret)
if !ok {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"success": false, "error": "未授权访问,请先登录"})
return
}
c.Set(adminClaimsKey, claims)
c.Next()
}
}
// GetAdminClaims 从 context 获取 admin claims需在 AdminAuth 之后调用)
func GetAdminClaims(c *gin.Context) *auth.AdminClaims {
v, ok := c.Get(adminClaimsKey)
if !ok || v == nil {
return nil
}
claims, ok := v.(*auth.AdminClaims)
if !ok {
return nil
}
return claims
}