我用 Golang 创建了一个简单的身份验证服务器。这是我的 .proto 文件:
syntax = "proto3";
package auth;
option go_package = "./pkg/pb";
service AuthService {
rpc Register(RegisterRequest) returns (RegisterResponse) {}
rpc Login(LoginRequest) returns (LoginResponse) {}
rpc Validate(ValidateRequest) returns (ValidateResponse) {}
}
// Register
message RegisterRequest {
string name = 1;
string surname = 2;
string email = 3;
string password = 4;
}
message RegisterResponse {
int64 status = 1;
string error = 2;
}
// Login
message LoginRequest {
string email = 1;
string password = 2;
}
message LoginResponse {
int64 status = 1;
string error = 2;
string token = 3;
}
// Validate
message ValidateRequest {
string token = 1;
}
message ValidateResponse {
int64 status = 1;
string error = 2;
int64 userID = 3;
}
我有 2 个文件,auth_grpc.pb.go 和 auth.pb.go
我想向我的客户注册,但是当我提出此请求时,会出现此错误。 我到处寻找 pb.AuthService 但我没有这个函数或实例。
这是我的 main.go 文件:
func main() {
env, err := config.LoadConfig()
if err != nil {
log.Fatalln("FAILED AT CONFIG: ", err)
}
h := db.Init(env.DBUrl)
jwt := utils.JwtWrapper{
SecretKey: env.JWTSecretKey,
Issuer: "go-grpc-auth-svc",
ExpirationHours: 24 * 365,
}
s := services.Server{
H: h,
Jwt: jwt,
}
grpcServer := grpc.NewServer()
pb.RegisterAuthServiceServer(grpcServer, &s)
lis, err := net.Listen("tcp", env.Port)
if err != nil {
log.Fatalln("Failed to listing:", err)
}
fmt.Printf("start gRPC server on %s", lis.Addr().String())
if err := grpcServer.Serve(lis); err != nil {
log.Fatalln("Failed to serve:", err)
}
}
和 auth.go 文件。我尝试实现 jwt 和数据库处理程序:
type Server struct {
H db.Handler
Jwt utils.JwtWrapper
pb.UnimplementedAuthServiceServer
}
func (s *Server) Register(ctx context.Context, req *pb.RegisterRequest) (*pb.RegisterResponse, error) {...}
我尝试向我的客户端注册,我的客户端文件和我的服务器一样简单。
我的服务客户端结构:
type ServiceClient struct {
Client pb.AuthServiceClient
}
我的 main.go 文件:
func main() {
c, err := config.LoadConfig()
if err != nil {
log.Fatalln("Failed at config: ", err)
}
// ROUTER INSTANCE
router := gin.Default()
// MIDDLEWARES
router.Use(middlewares.ErrorHandler)
auth.RegisterRoutes(router, &c)
router.Run(c.Port)
}
并注册路由文件:
func RegisterRoutes(r *gin.Engine, c *config.Config) *ServiceClient {
svc := &ServiceClient{
Client: InitServiceClient(c),
}
routes := r.Group("/auth")
routes.POST("/register", svc.Register)
routes.POST("/login", svc.Login)
fmt.Println(svc)
return svc
}
func (svc *ServiceClient) Register(ctx *gin.Context) {
routes.Register(ctx, svc.Client)
}
func (svc *ServiceClient) Login(ctx *gin.Context) {
routes.Login(ctx, svc.Client)
}
最佳答案
我查看了您的 github 存储库(因为您发布的代码中没有明显的问题)。
在 client auth.proto
您指定:
package pb;
但是在 the service它是:
package auth;
所以错误 unknown service pb.AuthService
是因为您的服务器提供 auth.AuthService
(而不是您的客户期望的pb.AuthService
)。更改您的.proto
文件,以便它们保持一致(或者,理想情况下,引用相同的文件)。
关于go - 未实现的 desc = 未知服务 pb.AuthService 我的简单例份验证服务器上出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76870104/