1 Star 0 Fork 0

GarlicBoris/gozero-utils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
usercontext_interceptor.go 1.50 KB
一键复制 编辑 原始数据 按行查看 历史
yanwc 提交于 2024-11-20 19:26 . refactor:error
package rpcx
import (
"context"
"strings"
"gitee.com/yanwc/gozero-utils/errx"
"gitee.com/yanwc/gozero-utils/httpx"
"gitee.com/yanwc/gozero-utils/jwtx"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
)
const (
AuthorizationKey = "authorization"
)
// token 不强制传递token
func UserContextInterceptor(ctx context.Context, req interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return handler(ctx, req)
}
token, ok := md[AuthorizationKey]
if len(token) == 0 || !ok {
return handler(ctx, req)
}
if !strings.Contains(token[0], "Bearer") {
ctx = context.WithValue(ctx, httpx.NewRpcTokenKey(), token[0])
return handler(ctx, req)
}
data := strings.Split(token[0], " ")
if len(data) != 2 {
return nil, errx.New(errx.TOKEN_PARSER, errx.WithMsgOption("Auth Format Error"))
}
ctx = context.WithValue(ctx, httpx.NewRpcTokenKey(), data[1])
return handler(ctx, req)
}
// 获取并验证jwt token
func GetUserContextFromWithJwt[T any](ctx context.Context, secret string, uc *T) *errx.Error {
token := ctx.Value(httpx.NewRpcTokenKey())
if t, ok := token.(string); ok {
err := jwtx.ParseToken(t, secret, uc)
return errx.New(errx.TOKEN_PARSER, errx.WithErrorOption(err))
} else {
return errx.New(errx.TOKEN_PARSER)
}
}
// 获取token
func GetToken(ctx context.Context) string {
token := ctx.Value(httpx.NewRpcTokenKey())
if t, ok := token.(string); ok {
return t
} else {
return ""
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/yanwc/gozero-utils.git
git@gitee.com:yanwc/gozero-utils.git
yanwc
gozero-utils
gozero-utils
v1.3.75

搜索帮助