随请求传递数据

时间:2018-12-19 03:32:27

标签: go mux

说我们有一些身份验证中间件:

router.Use(auth);

看起来像:

func auth(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        var user User
        mapstructure.Decode(claims, &user)
        return next.ServeHTTP(w, r)
    } 

     json.NewEncoder(w).Encode(Exception{Message: "Invalid authorization token"})

    })
}

我的问题是-如果我们将JWT声明解码为用户,我如何在其他中间件功能中引用该用户。使用Node.js Express,我可以将用户固定到请求对象。 Golang有什么方法可以做到这一点吗?

我唯一知道的方法是创建一个地图,将请求映射到用户。但是然后要清理地图,我将必须有一些钩子,一旦发送了该请求的响应,该钩子便可以删除地图条目。

0 个答案:

没有答案