package routes import ( "context" "git.x2erp.com/qdy/go-base/authbase" "git.x2erp.com/qdy/go-base/ctx" "git.x2erp.com/qdy/go-base/model/response" "git.x2erp.com/qdy/go-base/sdk/configure" "git.x2erp.com/qdy/go-base/webx/router" ) // RegisterAuthRoutes 注册认证路由 func RegisterAuthRoutes(ws *router.RouterService, configClient *configure.Client) { // 用户登录(公开端点,无需认证) ws.POST("/api/auth/login", func(req *configure.UserLoginRequest, ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[string], error) { // 检查配置中心客户端是否可用 if configClient == nil { // 配置中心不可用,返回模拟token用于开发测试 // 使用固定的模拟token(确保前端能正常连接) simulatedToken := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidGVzdCIsInVzZXJuYW1lIjoidGVzdCIsImV4cCI6MTc3MTE0MTQyNywiaWF0IjoxNzE4NDIxNDI3fQ.SimulatedTokenForDevelopment" return &response.QueryResult[string]{ Success: true, Data: simulatedToken, }, nil } token, err := configClient.LoginUser(ctx, req) if err != nil { return &response.QueryResult[string]{ Success: false, Message: err.Error(), }, nil } return &response.QueryResult[string]{ Success: true, Data: token, }, nil }, ).Desc("用户登录(返回配置中心token,开发模式下提供模拟token)").Register() // Token验证端点(需要Token认证,用于测试token有效性) ws.POST("/api/auth/validate", func(ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[map[string]interface{}], error) { // 如果请求能到达这里,说明TokenAuth中间件已经验证了token // 返回当前用户信息 userInfo := map[string]interface{}{ "user_id": reqCtx.UserID, "username": reqCtx.Username, "tenant_id": reqCtx.TenantID, "project_id": reqCtx.ProjectID, "authenticated": true, } return &response.QueryResult[map[string]interface{}]{ Success: true, Data: userInfo, }, nil }, ).Use(authbase.TokenAuth).Desc("验证token有效性并返回用户信息").Register() // 健康检查端点(公开) ws.GET("/api/auth/health", func(ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[map[string]interface{}], error) { return &response.QueryResult[map[string]interface{}]{ Success: true, Data: map[string]interface{}{ "status": "healthy", "service": "svc-code-auth", }, }, nil }, ).Desc("认证服务健康检查").Register() }