| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package svc
- import (
- "context"
- "fmt"
- "slow_wild_api/apps/internal/config"
- "slow_wild_api/apps/internal/middleware"
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
- "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserverclient"
- "github.com/zeromicro/go-zero/rest"
- "github.com/zeromicro/go-zero/zrpc"
- )
- type ServiceContext struct {
- Config config.Config
- SlowWildPb slowwildserverclient.SlowWildServer
- OptionalJwtMiddleware rest.Middleware
- }
- // 创建 gRPC 拦截器
- func userAuthInterceptor() grpc.UnaryClientInterceptor {
- return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
- // 从context中获取user_id
- if userId := ctx.Value("user_id"); userId != nil {
- // 创建metadata
- md := metadata.New(map[string]string{
- "user_id": fmt.Sprint(userId),
- })
- // 将metadata添加到context
- ctx = metadata.NewOutgoingContext(ctx, md)
- }
- return invoker(ctx, method, req, reply, cc, opts...)
- }
- }
- func NewServiceContext(c config.Config) *ServiceContext {
- // 创建带有拦截器的 gRPC 客户端
- client := zrpc.MustNewClient(c.SlowwildRpc,
- zrpc.WithUnaryClientInterceptor(userAuthInterceptor()))
- return &ServiceContext{
- Config: c,
- SlowWildPb: slowwildserverclient.NewSlowWildServer(client),
- OptionalJwtMiddleware: middleware.NewOptionalJwtMiddleware(c.Auth.AccessSecret).Handle,
- }
- }
|