在 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")
我正在使用 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")