videoplayer/handler/user.go

79 lines
2.3 KiB
Go

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.Minute * 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.Second*100) // 设置过期时间为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.Minute * 10).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})
}