package handler import ( "fmt" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt" "time" "videoplayer/service" "videoplayer/worker" ) var signingKey = []byte("my_secret_key") func SetUpUserGroup(router *gin.Engine) { userGroup := router.Group("/user") userGroup.POST("/register", registerHandler) userGroup.POST("/login", loginHandler) } type RLReq struct { User string `json:"user"` Email string `json:"email"` Password string `json:"password"` } func loginHandler(c *gin.Context) { var req_data RLReq tokenString := "" if err := c.ShouldBindJSON(&req_data); err == nil { user := service.GetUser(req_data.User, req_data.Password) if user.ID != 0 { // 生成 JWT 令牌 token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "username": user.Name, "id": user.ID, "exp": time.Now().Add(time.Hour * 10).Unix(), // 令牌过期时间, 1分钟后过期 }) tokenString, err = token.SignedString(signingKey) if err != nil { c.JSON(400, gin.H{"error": err.Error(), "code": 1, "message": "error"}) return } worker.SetRedisWithExpire(tokenString, tokenString, time.Hour*10) // 设置过期时间为10分钟 // 返回令牌 c.JSON(200, gin.H{"token": tokenString, "username": req_data.User, "code": 0, "message": "success"}) } else { c.JSON(400, gin.H{"error": "user not found", "code": 1, "message": "error"}) } } else { c.JSON(400, gin.H{"error": err.Error(), "code": 1, "message": "error"}) } } func registerHandler(c *gin.Context) { var req_data RLReq tokenString := "" if err := c.ShouldBindJSON(&req_data); err == nil { id := service.CreateUser(req_data.User, req_data.Password, req_data.Email) // 生成 JWT 令牌 token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "username": req_data.User, "id": id, "exp": time.Now().Add(time.Hour * 100).Unix(), // 令牌过期时间, 1分钟后过期 }) tokenString, err = token.SignedString(signingKey) if err != nil { c.JSON(400, gin.H{"error": err.Error()}) } } else { c.JSON(400, gin.H{"error": err.Error()}) } fmt.Println(req_data) worker.SetRedisWithExpire(req_data.User, tokenString, 600) // 设置过期时间为10分钟 // 返回令牌 c.JSON(200, gin.H{"token": tokenString, "username": req_data.User}) }