- 实现数据库连接和自动迁移 - 实现用户服务(登录、资料、JWT认证) - 实现许愿服务(创建、列表、机器人许愿) - 实现订单服务(创建、支付、状态管理) - 实现JWT认证中间件 - 实现管理后台API(仪表盘、用户、订单、许愿、设置) - 创建Inertia.js前端页面(Vue3 + Tailwind CSS) - 修复Go模块依赖问题
95 lines
1.9 KiB
Go
95 lines
1.9 KiB
Go
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gouki/lunar-server/internal/config"
|
|
"github.com/gouki/lunar-server/internal/service"
|
|
)
|
|
|
|
// CORS 跨域中间件
|
|
func CORS() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
c.Header("Access-Control-Allow-Origin", "*")
|
|
c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
|
|
c.Header("Access-Control-Allow-Headers", "Origin, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
|
|
|
|
if c.Request.Method == "OPTIONS" {
|
|
c.AbortWithStatus(http.StatusNoContent)
|
|
return
|
|
}
|
|
|
|
c.Next()
|
|
}
|
|
}
|
|
|
|
// Logger 日志中间件
|
|
func Logger() gin.HandlerFunc {
|
|
return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
|
|
return ""
|
|
})
|
|
}
|
|
|
|
// Auth JWT认证中间件
|
|
func Auth() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
authHeader := c.GetHeader("Authorization")
|
|
if authHeader == "" {
|
|
c.JSON(http.StatusUnauthorized, gin.H{
|
|
"code": 401,
|
|
"msg": "未授权",
|
|
})
|
|
c.Abort()
|
|
return
|
|
}
|
|
|
|
// 解析 Bearer token
|
|
parts := strings.SplitN(authHeader, " ", 2)
|
|
if !(len(parts) == 2 && parts[0] == "Bearer") {
|
|
c.JSON(http.StatusUnauthorized, gin.H{
|
|
"code": 401,
|
|
"msg": "token格式错误",
|
|
})
|
|
c.Abort()
|
|
return
|
|
}
|
|
|
|
tokenString := parts[1]
|
|
|
|
// 解析 token
|
|
cfg := config.Load()
|
|
userService := service.NewUserService()
|
|
userID, err := userService.ParseToken(tokenString, cfg.JWT.Secret)
|
|
if err != nil {
|
|
c.JSON(http.StatusUnauthorized, gin.H{
|
|
"code": 401,
|
|
"msg": "token无效",
|
|
})
|
|
c.Abort()
|
|
return
|
|
}
|
|
|
|
// 将用户ID存入上下文
|
|
c.Set("userID", userID)
|
|
c.Next()
|
|
}
|
|
}
|
|
|
|
// AdminAuth 管理员认证中间件
|
|
func AdminAuth() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
// TODO: 实现管理员认证
|
|
c.Next()
|
|
}
|
|
}
|
|
|
|
// RateLimit 限流中间件
|
|
func RateLimit() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
// TODO: 实现限流
|
|
c.Next()
|
|
}
|
|
}
|