添加扫描登录部分uuid与获取状态代码

This commit is contained in:
junleea 2024-06-01 16:22:18 +08:00
parent 063856395c
commit a10830f820
6 changed files with 62 additions and 3 deletions

View File

@ -2,11 +2,10 @@ package dao
import ( import (
"fmt" "fmt"
"gorm.io/gorm"
) )
type User struct { type User struct {
gorm.Model ID uint `gorm:"primarykey column:id"`
Name string `gorm:"column:name"` Name string `gorm:"column:name"`
Age int `gorm:"column:age"` Age int `gorm:"column:age"`
Email string `gorm:"column:email"` Email string `gorm:"column:email"`

1
go.mod
View File

@ -24,6 +24,7 @@ require (
github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect
github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect
github.com/goccy/go-json v0.10.2 // 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/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect github.com/json-iterator/go v1.1.12 // indirect

2
go.sum
View File

@ -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 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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/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 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=

View File

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt" "github.com/golang-jwt/jwt"
"github.com/google/uuid"
"time" "time"
"videoplayer/service" "videoplayer/service"
"videoplayer/worker" "videoplayer/worker"
@ -17,6 +18,9 @@ func SetUpUserGroup(router *gin.Engine) {
userGroup := router.Group("/user") userGroup := router.Group("/user")
userGroup.POST("/register", registerHandler) userGroup.POST("/register", registerHandler)
userGroup.POST("/login", loginHandler) userGroup.POST("/login", loginHandler)
userGroup.POST("/uuid", ScanUUID)
userGroup.POST("/gqr", GetQRStatus)
userGroup.POST("/sqr", SetQRStatus)
} }
type RLReq struct { type RLReq struct {
@ -25,6 +29,56 @@ type RLReq struct {
Password string `json:"password" form:"password"` 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) { func loginHandler(c *gin.Context) {
var req_data RLReq var req_data RLReq
tokenString := "" tokenString := ""

View File

@ -37,7 +37,7 @@ func JWTAuthMiddleware() gin.HandlerFunc {
} }
//如果请求为login或register则不需要验证token //如果请求为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() c.Next()
return return
} }

View File

@ -69,6 +69,9 @@ func SetHash(key string, id int, name, email string) {
// 设置哈希表的字段值, 0 表示不设置过期时间, 如果需要设置过期时间, 可以设置为 time.Second * 10 等 // 设置哈希表的字段值, 0 表示不设置过期时间, 如果需要设置过期时间, 可以设置为 time.Second * 10 等
err := redisClient.HSet(ctx, key, fields).Err() 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() err = redisClient.Expire(ctx, key, time.Hour*10).Err()
if err != nil { if err != nil {
log.Fatalf("Error setting key: %v", err) log.Fatalf("Error setting key: %v", err)