在部署到appengine时,http.Request具有未定义的字段

时间:2017-05-02 16:33:48

标签: google-app-engine go

我正在开发一个网络应用程序,我依赖以下代码进行身份验证(我正在使用github.com/dgrijalva/jwt-go包):

func ValidateProtectedPage(protectedPage http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
    // If no Auth cookie is set then return a 404 not found
    cookie, err := req.Cookie("Auth")
    if err != nil {
        Forbidden(res)
        return
    }

    // Return a Token using the cookie
    token, err := jwt.ParseWithClaims(cookie.Value, &Claims{}, func(token *jwt.Token) (interface{}, error) {
        // Make sure token's signature wasn't changed
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, fmt.Errorf("Unexpected siging method")
        }
        return []byte(util.Secret), nil
    })

    if err != nil {
        Forbidden(res)
        return
    }

    // Grab the tokens claims and pass it into the original request
    if claims, ok := token.Claims.(*Claims); ok && token.Valid {
        ctx := context.WithValue(req.Context(), "Auth", *claims)
        protectedPage(res, req.WithContext(ctx))
    } else {
        Forbidden(res)
    }
})}

问题是,我正在尝试将我的应用部署到appengine,我收到以下错误:

planilla-go/controllers/auth.go:45: req.Context undefined (type *http.Request has no field or method Context)
planilla-go/controllers/auth.go:46: req.WithContext undefined (type *http.Request has no field or method WithContext)

据我所知,这是因为appengine的请求与go库中的请求不兼容,但我找不到解决方法

有没有办法将http.Request包装或转换为使用appengine?

1 个答案:

答案 0 :(得分:0)

Appengine仅支持Go 1.6。有点莫名其妙,因为它使我的应用程序无用而没有重大的compat大修,但这是平台的当前状态