gpt4 book ai didi

go - GRPC : How to pass value from interceptor to service function

转载 作者:行者123 更新时间:2023-12-02 18:19:02 24 4
gpt4 key购买 nike

我有一个一元拦截器,用于验证 jwt token 并解析 id 和角色。现在我需要将这些传递给服务函数。

拦截器

func Unary() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
log.Printf("--> unary interceptor: %s ", info.FullMethod)

if info.FullMethod == "/AntmanServer.AntmanUserRoutes/LoginUser" {
return handler(ctx, req)
}

userId, _, err := authorize(ctx)
if err != nil {
return fmt.Sprintf("Error : %s", err), err
}

//newCtx := metadata.AppendToOutgoingContext(ctx,"id-key", string(userId), "role-key", roles)

//header := metadata.Pairs("id-key", string(userId), "role-key", roles)
//grpc.SendHeader(ctx, header)
newCtx := context.WithValue(ctx, "id-key", string(userId))
return handler(newCtx, req)
}

}

我已经尝试过了

newCtx := metadata.AppendToOutgoingContext(ctx,"id-key", string(userId), "role-key", roles)

还有这个

newCtx := context.WithValue(ctx, "id-key", string(userId))

但没有任何效果,如何做到这一点。提前致谢。

最佳答案

好的,问题解决了,感谢评论里的大家。我正在为将来来到这里的人们发布此解决方案。

    //interceptor
md, ok := metadata.FromIncomingContext(ctx)
if ok {
md.Append("id-key", string(id))
md.Append("role-key", role)
}
newCtx := metadata.NewIncomingContext(ctx, md)
return handler(newCtx, req)


//Rpc function
md, ok := metadata.FromIncomingContext(ctx)
Userid := md["id-key"]
role := md["role-key"]

关于go - GRPC : How to pass value from interceptor to service function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71114401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com