auth.go 992 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package middleware
  2. import (
  3. "strings"
  4. "github.com/gin-gonic/gin"
  5. "github.com/sirupsen/logrus"
  6. "nn.daxia.dev/model"
  7. )
  8. func Auth() gin.HandlerFunc {
  9. return func(ctx *gin.Context) {
  10. var err error
  11. if ctx.Request.Method == "OPTIONS" {
  12. ctx.Next()
  13. return
  14. }
  15. path := ctx.Request.URL.Path
  16. if strings.HasPrefix(path, "/connect") {
  17. ctx.Next()
  18. return
  19. }
  20. userToken := ctx.Request.Header.Get("x-token")
  21. once := ctx.Request.Header.Get("x-once")
  22. if userToken == "" || once == "" {
  23. logrus.Error("参数错误:", "once:", once, " token:", userToken)
  24. ctx.AbortWithStatus(500)
  25. return
  26. }
  27. userModel := model.User{}
  28. isValid, err := userModel.TokenIsValid(userToken)
  29. if err != nil {
  30. logrus.Error(err)
  31. ctx.AbortWithStatus(500)
  32. return
  33. }
  34. if !isValid {
  35. ctx.JSON(200, "用户被禁用")
  36. ctx.AbortWithStatus(500)
  37. return
  38. }
  39. ctx.Set("req_ctx", map[string]interface{}{
  40. "userModel": userModel,
  41. "once": once,
  42. })
  43. ctx.Next()
  44. }
  45. }