You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nnet/internal/middleware/builtin/auth.go

39 lines
991 B
Go

package builtin
import (
ctxpkg "git.noahlan.cn/noahlan/nnet/v2/pkg/context"
routerpkg "git.noahlan.cn/noahlan/nnet/v2/pkg/router"
)
// AuthMiddleware 认证中间件工厂
func AuthMiddleware(validator func(ctx ctxpkg.Context) bool) routerpkg.Handler {
return func(ctx ctxpkg.Context) error {
if validator == nil {
return nil
}
if !validator(ctx) {
ctx.Response().WriteString("Unauthorized\n")
return nil // 或者返回错误
}
return nil
}
}
// TokenAuthMiddleware Token认证中间件
func TokenAuthMiddleware(tokenKey string, expectedToken string) routerpkg.Handler {
return AuthMiddleware(func(ctx ctxpkg.Context) bool {
token := ctx.GetString(tokenKey)
return token == expectedToken
})
}
// HeaderAuthMiddleware Header认证中间件
func HeaderAuthMiddleware(headerKey string, expectedValue string) routerpkg.Handler {
return AuthMiddleware(func(ctx ctxpkg.Context) bool {
value := ctx.GetString(headerKey)
return value == expectedValue
})
}