我有一个一元拦截器,它验证jwt令牌并解析id和role。现在我需要将这些传递给服务函数。
拦截者
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))
但是没有一个工作,如何做到这一点。提前感谢。
2条答案
按热度按时间ippsafx71#
好了,问题解决了,谢谢大家的评论。我把这个解决方案贴出来给以后来这里的人。
hs1ihplo2#
写入客户端:
并读入服务器: