簡體   English   中英

如何將目標的參數傳遞給 gin/golang 中的中間件

[英]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.govalidate 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM