rpc_value.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package middleware
  2. import (
  3. "context"
  4. "encoding/json"
  5. "net/url"
  6. "strconv"
  7. "google.golang.org/grpc/metadata"
  8. "github.com/go-kratos/kratos/v2/middleware"
  9. )
  10. func GrpcValue(handler middleware.Handler) middleware.Handler {
  11. return func(ctx context.Context, req interface{}) (reply interface{}, err error) {
  12. if md, ok := metadata.FromIncomingContext(ctx); ok {
  13. userID := md.Get("user_id")
  14. if len(userID) > 0 {
  15. _userID, _ := strconv.ParseInt(userID[0], 10, 64)
  16. ctx = context.WithValue(ctx, "user_id", _userID)
  17. }
  18. claimMap := md.Get("jwt_claims")
  19. if len(claimMap) > 0 {
  20. _claimMap := json.RawMessage(claimMap[0])
  21. ctx = context.WithValue(ctx, "jwt_claims", _claimMap)
  22. }
  23. token := md.Get("auth_token")
  24. if len(token) > 0 {
  25. ctx = context.WithValue(ctx, "auth_token", token[0])
  26. }
  27. page := md.Get("page")
  28. if len(page) > 0 {
  29. _page, _ := strconv.ParseInt(page[0], 10, 64)
  30. ctx = context.WithValue(ctx, "page", _page)
  31. }
  32. pageSize := md.Get("page_size")
  33. if len(pageSize) > 0 {
  34. _pageSize, _ := strconv.ParseInt(pageSize[0], 10, 64)
  35. ctx = context.WithValue(ctx, "page_size", _pageSize)
  36. }
  37. query := md.Get("query")
  38. if len(query) > 0 {
  39. _query, _ := url.ParseQuery(query[0])
  40. ctx = context.WithValue(ctx, "query", _query)
  41. }
  42. }
  43. return handler(ctx, req)
  44. }
  45. }