説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

authentication.go 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package auth
  2. import (
  3. "net/http"
  4. "strings"
  5. "github.com/gin-gonic/gin"
  6. "git.x2erp.com/qdy/go-base/config"
  7. )
  8. func AuthMiddleware() gin.HandlerFunc {
  9. return func(c *gin.Context) {
  10. // 从 Header 中获取 token
  11. authHeader := c.GetHeader("Authorization")
  12. if authHeader == "" {
  13. c.JSON(http.StatusUnauthorized, gin.H{
  14. "success": false,
  15. "error": "Authorization header is required",
  16. })
  17. c.Abort()
  18. return
  19. }
  20. // 检查 Bearer token 格式
  21. parts := strings.Split(authHeader, " ")
  22. if len(parts) != 2 || parts[0] != "Bearer" {
  23. c.JSON(http.StatusUnauthorized, gin.H{
  24. "success": false,
  25. "error": "Authorization header format must be Bearer {token}",
  26. })
  27. c.Abort()
  28. return
  29. }
  30. tokenString := parts[1]
  31. configTokenString := config.GetConfig().GetAuth().Token
  32. // 比较 token 是否相等
  33. if tokenString != configTokenString {
  34. c.JSON(http.StatusUnauthorized, gin.H{
  35. "success": false,
  36. "error": "Invalid token",
  37. })
  38. c.Abort()
  39. return
  40. }
  41. // Token 验证通过,可以存储一些上下文信息
  42. c.Set("authenticated", true)
  43. c.Set("authType", "token")
  44. c.Next()
  45. }
  46. }