Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

auth_middleware.go 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package auth
  2. import (
  3. "context"
  4. "net/http"
  5. "git.x2erp.com/qdy/go-db/factory/database"
  6. )
  7. // authMiddleware 验证 Authorization 头和项目 ID 头
  8. func AuthMiddleware(next http.Handler, dbFactory *database.DBFactory) http.Handler {
  9. projectIDHeader := "X-Project-ID"
  10. authToken := "123"
  11. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  12. // 验证 Authorization 头
  13. authHeader := r.Header.Get("Authorization")
  14. if authHeader == "" {
  15. http.Error(w, "Authorization header required", http.StatusUnauthorized)
  16. return
  17. }
  18. expected := "Bearer " + authToken
  19. if authHeader != expected {
  20. http.Error(w, "Invalid authorization token", http.StatusUnauthorized)
  21. return
  22. }
  23. // 提取项目 ID 头并存储到请求上下文中,供 extractRequestContext 使用
  24. projectID := r.Header.Get(projectIDHeader)
  25. if projectID != "" {
  26. // 将项目 ID 存储到上下文中
  27. ctx := context.WithValue(r.Context(), "projectID", projectID)
  28. r = r.WithContext(ctx)
  29. }
  30. next.ServeHTTP(w, r)
  31. })
  32. }