No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

auth_routes.go 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package routes
  2. import (
  3. "context"
  4. "git.x2erp.com/qdy/go-base/authbase"
  5. "git.x2erp.com/qdy/go-base/ctx"
  6. "git.x2erp.com/qdy/go-base/model/response"
  7. "git.x2erp.com/qdy/go-base/sdk/configure"
  8. "git.x2erp.com/qdy/go-base/webx/router"
  9. )
  10. // RegisterAuthRoutes 注册认证路由
  11. func RegisterAuthRoutes(ws *router.RouterService, configClient *configure.Client) {
  12. // 用户登录(公开端点,无需认证)
  13. ws.POST("/api/auth/login",
  14. func(req *configure.UserLoginRequest, ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[string], error) {
  15. // 检查配置中心客户端是否可用
  16. if configClient == nil {
  17. // 配置中心不可用,返回模拟token用于开发测试
  18. // 使用固定的模拟token(确保前端能正常连接)
  19. simulatedToken := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidGVzdCIsInVzZXJuYW1lIjoidGVzdCIsImV4cCI6MTc3MTE0MTQyNywiaWF0IjoxNzE4NDIxNDI3fQ.SimulatedTokenForDevelopment"
  20. return &response.QueryResult[string]{
  21. Success: true,
  22. Data: simulatedToken,
  23. }, nil
  24. }
  25. token, err := configClient.LoginUser(ctx, req)
  26. if err != nil {
  27. return &response.QueryResult[string]{
  28. Success: false,
  29. Message: err.Error(),
  30. }, nil
  31. }
  32. return &response.QueryResult[string]{
  33. Success: true,
  34. Data: token,
  35. }, nil
  36. },
  37. ).Desc("用户登录(返回配置中心token,开发模式下提供模拟token)").Register()
  38. // Token验证端点(需要Token认证,用于测试token有效性)
  39. ws.POST("/api/auth/validate",
  40. func(ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[map[string]interface{}], error) {
  41. // 如果请求能到达这里,说明TokenAuth中间件已经验证了token
  42. // 返回当前用户信息
  43. userInfo := map[string]interface{}{
  44. "user_id": reqCtx.UserID,
  45. "username": reqCtx.Username,
  46. "tenant_id": reqCtx.TenantID,
  47. "project_id": reqCtx.ProjectID,
  48. "authenticated": true,
  49. }
  50. return &response.QueryResult[map[string]interface{}]{
  51. Success: true,
  52. Data: userInfo,
  53. }, nil
  54. },
  55. ).Use(authbase.TokenAuth).Desc("验证token有效性并返回用户信息").Register()
  56. // 健康检查端点(公开)
  57. ws.GET("/api/auth/health",
  58. func(ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[map[string]interface{}], error) {
  59. return &response.QueryResult[map[string]interface{}]{
  60. Success: true,
  61. Data: map[string]interface{}{
  62. "status": "healthy",
  63. "service": "svc-code-auth",
  64. },
  65. }, nil
  66. },
  67. ).Desc("认证服务健康检查").Register()
  68. }