protobuf-demo/middleware/auth-middleware.go

36 lines
809 B
Go
Raw Normal View History

2021-10-04 04:39:54 +00:00
package middleware
import (
"context"
"log"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
)
// Interceptor 拦截器
func Interceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
// 进行认证
log.Println("interceptor...")
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, grpc.Errorf(codes.Unauthenticated, "no token ")
}
// md 是一个 map[string][]string 类型的
val, ok := md["token"]
if !ok {
if val == nil {
return nil, grpc.Errorf(codes.Unauthenticated, "token is null")
}
}
if val[0] != "hello" {
return nil, grpc.Errorf(codes.Unauthenticated, "token invalide: token=%s", val[0])
}
// 继续处理请求
return handler(ctx, req)
}