From a10830f82047682c37c6d0ae35da21e911e202d4 Mon Sep 17 00:00:00 2001 From: junleea <354425203@qq.com> Date: Sat, 1 Jun 2024 16:22:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=AB=E6=8F=8F=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=83=A8=E5=88=86uuid=E4=B8=8E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/user.go | 3 +-- go.mod | 1 + go.sum | 2 ++ handler/user.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 2 +- worker/redis.go | 3 +++ 6 files changed, 62 insertions(+), 3 deletions(-) diff --git a/dao/user.go b/dao/user.go index 2786d3d..a085829 100644 --- a/dao/user.go +++ b/dao/user.go @@ -2,11 +2,10 @@ package dao import ( "fmt" - "gorm.io/gorm" ) type User struct { - gorm.Model + ID uint `gorm:"primarykey column:id"` Name string `gorm:"column:name"` Age int `gorm:"column:age"` Email string `gorm:"column:email"` diff --git a/go.mod b/go.mod index 2533223..8a1d2c0 100644 --- a/go.mod +++ b/go.mod @@ -24,6 +24,7 @@ require ( github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/goccy/go-json v0.10.2 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect diff --git a/go.sum b/go.sum index 733ac37..86c8ef1 100644 --- a/go.sum +++ b/go.sum @@ -40,6 +40,8 @@ github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= diff --git a/handler/user.go b/handler/user.go index 578d77a..fd9bb43 100644 --- a/handler/user.go +++ b/handler/user.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt" + "github.com/google/uuid" "time" "videoplayer/service" "videoplayer/worker" @@ -17,6 +18,9 @@ func SetUpUserGroup(router *gin.Engine) { userGroup := router.Group("/user") userGroup.POST("/register", registerHandler) userGroup.POST("/login", loginHandler) + userGroup.POST("/uuid", ScanUUID) + userGroup.POST("/gqr", GetQRStatus) + userGroup.POST("/sqr", SetQRStatus) } type RLReq struct { @@ -25,6 +29,56 @@ type RLReq struct { Password string `json:"password" form:"password"` } +type QRReq struct { + UUID string `json:"uuid" form:"uuid"` +} + +func ScanUUID(c *gin.Context) { + id := uuid.New() + worker.SetRedisWithExpire(id.String(), "0", time.Minute*3) + c.JSON(200, gin.H{"code": 0, "message": "success", "data": id.String()}) +} + +func SetQRStatus(c *gin.Context) { + c.JSON(200, gin.H{"code": 0, "message": "success", "data": "1"}) +} + +// 确认返回token数据 +func ConfirmQRLogin(c *gin.Context) { + c.JSON(200, gin.H{"code": 0, "message": "success", "data": "1"}) +} + +func GetQRStatus(c *gin.Context) { + var qrReq QRReq + if err := c.ShouldBind(&qrReq); err == nil { + str := worker.GetRedis(qrReq.UUID) + switch str { + case "0": + c.JSON(200, gin.H{"code": 0, "message": "success", "data": "0"}) //空值 + case "1": + c.JSON(200, gin.H{"code": 0, "message": "success", "data": "1"}) //已扫描待确认 + default: + // 解析 JWT 令牌 + token, err := jwt.Parse(str, func(token *jwt.Token) (interface{}, error) { + return signingKey, nil + }) + if err != nil { + c.JSON(200, gin.H{"error": err.Error(), "code": 1, "message": "error"}) + return + } + // 返回令牌 + data := make(map[string]interface{}) + data["id"] = token.Claims.(jwt.MapClaims)["id"] + data["username"] = token.Claims.(jwt.MapClaims)["username"] + data["email"] = token.Claims.(jwt.MapClaims)["email"] + data["token"] = str + c.JSON(200, gin.H{"code": 0, "message": "success", "data": data}) //确认返回token数据 + } + } else { + c.JSON(200, gin.H{"error": err.Error(), "code": 1, "message": "error"}) + } +} + func loginHandler(c *gin.Context) { var req_data RLReq tokenString := "" diff --git a/main.go b/main.go index 9657098..034b934 100644 --- a/main.go +++ b/main.go @@ -37,7 +37,7 @@ func JWTAuthMiddleware() gin.HandlerFunc { } //如果请求为login或register,则不需要验证token - if strings.Contains(c.Request.URL.Path, "/login") || strings.Contains(c.Request.URL.Path, "/register") { + if strings.Contains(c.Request.URL.Path, "/login") || strings.Contains(c.Request.URL.Path, "/register") || strings.Contains(c.Request.URL.Path, "/uuid") || strings.Contains(c.Request.URL.Path, "/gqr") || strings.Contains(c.Request.URL.Path, "/uuid") { c.Next() return } diff --git a/worker/redis.go b/worker/redis.go index bc03328..998d66c 100644 --- a/worker/redis.go +++ b/worker/redis.go @@ -69,6 +69,9 @@ func SetHash(key string, id int, name, email string) { // 设置哈希表的字段值, 0 表示不设置过期时间, 如果需要设置过期时间, 可以设置为 time.Second * 10 等 err := redisClient.HSet(ctx, key, fields).Err() + if err != nil { + log.Fatalf("Error setting key: %v", err) + } err = redisClient.Expire(ctx, key, time.Hour*10).Err() if err != nil { log.Fatalf("Error setting key: %v", err)