auth.go 1011 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package middleware
  2. import (
  3. "net/http"
  4. "os"
  5. "github.com/gin-gonic/gin"
  6. )
  7. // AuthToken 从环境变量或默认值获取认证token
  8. func GetAuthToken() string {
  9. token := os.Getenv("AUTH_TOKEN")
  10. if token == "" {
  11. // 默认token,生产环境应该通过环境变量设置
  12. return "admin-token-123456"
  13. }
  14. return token
  15. }
  16. // AuthMiddleware Token认证中间件
  17. func AuthMiddleware() gin.HandlerFunc {
  18. return func(c *gin.Context) {
  19. // 从Header中获取token
  20. token := c.GetHeader("Authorization")
  21. // 如果Header中没有,尝试从Query参数获取
  22. if token == "" {
  23. token = c.Query("token")
  24. }
  25. // 移除 "Bearer " 前缀(如果存在)
  26. if len(token) > 7 && token[:7] == "Bearer " {
  27. token = token[7:]
  28. }
  29. // 验证token
  30. expectedToken := GetAuthToken()
  31. if token != expectedToken {
  32. c.JSON(http.StatusUnauthorized, gin.H{
  33. "code": 401,
  34. "msg": "未授权,请先登录",
  35. })
  36. c.Abort()
  37. return
  38. }
  39. // token验证通过,继续处理
  40. c.Next()
  41. }
  42. }