在 golang gin 中显示基于用户的静态图像

show static image based on users in golang gin

我正在使用 Gin 框架。我有一个包含一些课程信息的数据库。用户可以在课程中注册并访问内容。内容是图像、视频和音频。 我将这些内容的相对位置存储在我的数据库中,如下所示:

Content\Courses\CourseOne\Unit_1\image.jpg

并将其更改为杜松子酒中的实际位置:

route := gin.Default()
route.Static("/Content","./Media")

一切正常,但我正在寻找一种在访问内容之前对用户进行身份验证的方法。在 above-mentioned 方式中,所有用户都可以通过更改所需模式的地址来访问任何数据。但我希望如果用户在课程中注册,则能够访问数据,否则会出现 404 错误。 我该怎么做?

编辑

因为被要求解释身份验证的实现:

我使用 JWT 进行身份验证。所以每个用户都有一个 HashID。 我有一个名为 UserCourses 的 table,购买课程后会插入用户信息。

这是我的课程路线:

route.GET("api/v1/courses", handler.GetCourses)

我的经纪人:

func GetCourses(context *gin.Context) {
    hashID, status, err := repository.GetToken(context)
    if err != nil {
        context.IndentedJSON(status, err)
        return
    }
    courses := make([]model.CourseAPI, 0)
    userInfo := model.Users{HashID: hashID}
    err = repository.DatabaseInstance.GetCourses(&courses, &userInfo)
    if err != nil {
        context.IndentedJSON(http.StatusServiceUnavailable, err)
        return
    }
    context.IndentedJSON(http.StatusOK, gin.H{"courses": courses})
}

JWT 令牌由客户端在 header 中传递。所以我得到令牌并验证它。该令牌包含用户 HashID,我在 UserCourses table 中检查该 HashID。除了课程信息之外,还有一个名为 isRegistered 的变量。如果 HashID 已在 UserCourses table 中为任何课程注册,则 isRegistered 将成为该课程的 true 否则 false.

您可以创建组路由并通过它应用认证中间件

r = gin.Default()

// public routes
r.GET("public", publicHandler)

// routes group
auth = r.Group("/")
// authentication middleware within group
auth.Use(AuthMiddleware())
// route before which auth middleware will be run
auth.Static("/Content","./Media")