[英]how to pass parameter of the destination to middleware in gin/golang
簡而言之,我的問題是:我將身份驗證令牌作為參數發送到我的目的地 api,似乎中間件無法訪問它。 由於中間件需要它來檢查身份驗證條件,我如何訪問該參數?
我正在嘗試實現一個簡單的身份驗證/授權應用程序。 我知道在 coockies 中設置身份驗證令牌很常見,但是,在我的用例中,我需要以不同的方式實現它。
實現是:登錄在響應正文中返回身份驗證令牌,並且任何時候需要身份驗證令牌,它都會作為參數"authorization"
發送給應用程序。
這是我的用戶路由器的代碼:
func UserRoute(router *gin.Engine) {
user := router.Group("/user")
{
user.POST("/signup", controllers.SignUp)
user.POST("/login", controllers.Login)
user.GET("/validate", middleware.RequireAuth, controllers.Validate)
}
}
在usercontrollers.go
中validate
function :
func Validate(c *gin.Context) {
user, _ := c.Get("user")
c.IndentedJSON(http.StatusOK, gin.H{
"message": user,
})
}
這是我發送的請求
http://localhost:6000/user/validate?authorization=[My-JWT-Token]
現在,當我嘗試讀取我的 auth 參數並在我的中間件中使用它時,它似乎實際上並不存在:
func RequireAuth(c *gin.Context) {
confs, _ := configs.LoadConfig()
tokenString := c.Param("authorization")
if tokenString == "" {
// this abort case always happens
c.AbortWithStatus(http.StatusUnauthorized)
}
}
1. ctx.Request.URL.Query().Get("authorization")
2. ctx.Query("authorization")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.