videoplayer/main.go

73 lines
1.5 KiB
Go
Raw Normal View History

package main
import (
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt"
"videoplayer/dao"
"videoplayer/handler"
"videoplayer/worker"
)
var signingKey = []byte("my_secret_key")
func main() {
r := gin.Default()
r.Use(JWTAuthMiddleware()) // 使用 JWT 认证中间件
handler.SetUpVideoGroup(r)
handler.SetUpUserGroup(r)
dao.Init()
worker.InitRedis()
r.Run("8082") // listen and serve on 0.0.0.0:8082
}
func JWTAuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// 从请求头中获取 JWT 令牌
tokenString := c.Request.Header.Get("Authorization")
//请求方式为get时从url中获取token
if tokenString == "" {
tokenString = c.Query("token")
}
//如果请求为login或register则不需要验证token
if c.Request.URL.Path == "/login" || c.Request.URL.Path == "/register" {
c.Next()
return
}
if tokenString == "" {
c.AbortWithStatus(401)
c.JSON(401, gin.H{
"message": "Unauthorized",
"error": "token is empty",
"code": "3",
})
return
}
// 解析 JWT 令牌
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return signingKey, nil
})
// 验证令牌
if err != nil || !token.Valid {
c.AbortWithStatus(401)
c.JSON(401, gin.H{
"message": "Unauthorized",
"error": "Invalid token",
"code": "4",
})
return
}
// 将用户信息添加到上下文中
c.Set("id", token.Claims.(jwt.MapClaims)["id"])
c.Set("username", token.Claims.(jwt.MapClaims)["username"])
// 继续处理请求
c.Next()
}
}