rpc_value.go 1.2 KB

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