package middleware import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/text/gstr" ) // Logger 中间件 func Logger(r *ghttp.Request) { startTime := gtime.TimestampMilli() r.Middleware.Next() endTime := gtime.TimestampMilli() g.Log().Infof(r.GetCtx(), "request: %s %s | status: %d | time: %dms", r.Method, r.URL.Path, r.Response.Status, endTime-startTime, ) } func Auth(r *ghttp.Request) { //utils.GetUserInfo(r.GetCtx()) token := r.Header.Get("Authorization") if token == "" || !gstr.HasPrefix(token, "Bearer ") { r.Response.WriteStatusExit(401, "Unauthorized") return } // 验证 token // TODO: 实现完整的JWT验证逻辑 // 当前为占位实现,实际使用时应替换为真实的token验证 // 例如:使用gogf/gf/v2/os/gjwt或其他JWT库进行验证 if !validateToken(gstr.SubStrFrom(token, "7")) { r.Response.WriteStatusExit(401, "Unauthorized") return } r.Middleware.Next() } // validateToken 验证Token有效性 // 当前为简化实现,实际生产环境应使用JWT或其他安全机制进行验证 // 示例: // - 使用gogf/gf/v2/os/gjwt库解析和验证JWT token // - 验证token签名、过期时间、签发者等 // - 从token中提取用户信息并存储到context // // 返回值: // - true: token有效 // - false: token无效或过期 func validateToken(token string) bool { // TODO: 实现真实的token验证逻辑 // 当前为占位实现,返回true以允许基本功能运行 // 生产环境必须替换为真实的验证逻辑 // 简单的非空检查 if token == "" { return false } // 建议的JWT验证示例(需要引入jwt库): /* claims := &jwt.MapClaims{} t, err := jwt.ParseWithClaims(token, claims, func(token *jwt.Token) (interface{}, error) { return []byte("your-secret-key"), nil }) if err != nil || !t.Valid { return false } // 检查过期时间 if exp, ok := (*claims)["exp"].(float64); ok { if time.Now().Unix() > int64(exp) { return false } } */ // 临时返回true,实际使用时应实现完整验证 return true }