Files
common/middleware/middleware.go
张斌 cd3571554f 1.修改basedo字段类型
2、提供获取authen中用户信息的方法
2026-03-12 08:50:33 +08:00

58 lines
1.3 KiB
Go

package middleware
import (
"context"
"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"
"golang.org/x/time/rate"
)
// 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,
)
}
var rateLimit = g.Cfg().MustGet(context.TODO(), "rate.limit").Int()
var rateBurst = g.Cfg().MustGet(context.TODO(), "rate.burst").Int()
var limiter = rate.NewLimiter(rate.Limit(rateLimit), rateBurst)
func Limiter(r *ghttp.Request) {
if !limiter.Allow() {
r.Response.WriteStatusExit(429) // Return 429 Too Many Requests
r.ExitAll()
}
r.Middleware.Next()
}
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
if !validateToken(gstr.SubStrFrom(token, "7")) {
r.Response.WriteStatusExit(401, "Unauthorized")
return
}
r.Middleware.Next()
}
func validateToken(token string) bool {
// 实现 token 验证逻辑
return token == "valid-token"
}