Golang gorilla/会话和URI范围?

Golang gorilla/会话和URI范围?,go,Go,我还是新来的。。。这很奇怪 我有一个简单的web应用程序,使用Gorilla会话进行身份验证。我将会话对象Auth存储在NewCookieStore中 如果我浏览到/users,我的代码302将重定向到/login。我登录后它就工作了。我可以转到/users,然后单击/user/1234即可 如果我直接输入/user/1234,它会正确重定向到/login,让我登录,我的UI会在标题中显示Auth变量。但它无法从会话中获取Auth对象 如果我将URL展平为/users和/1234,它将正常工作

我还是新来的。。。这很奇怪

我有一个简单的web应用程序,使用Gorilla会话进行身份验证。我将会话对象Auth存储在NewCookieStore中

如果我浏览到/users,我的代码302将重定向到/login。我登录后它就工作了。我可以转到/users,然后单击/user/1234即可

如果我直接输入/user/1234,它会正确重定向到/login,让我登录,我的UI会在标题中显示Auth变量。但它无法从会话中获取Auth对象

如果我将URL展平为/users和/1234,它将正常工作

所以它一定与作用域和URI有关?当我转到/user/1234时,GetAuth只返回nil。但它返回的正确对象级别更高

保护URI是由中间件func完成的。因此,无论哪种方式,代码都应该是相同的

有人能指出我遗漏了什么吗

提前谢谢

func protect(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        log.Println("-----------------", r.Method, r.RequestURI)

        s := db.GetSession(r)
        auth := db.GetAuth(s)

        if !auth.Authenticated {
            returnuri := r.RequestURI
            s.Values["ReturnURI"] = returnuri
            err := s.Save(r, w)
            if err != nil {
                log.Println(err)
            }
            http.Redirect(w, r, "/login", 302)
        }

        next(w, r)
    }
}


宾果。。。需要路径选项。它一定是使用了任意路径,这取决于我是如何进来的

Store.Options = &sessions.Options{
    Path:     "/",
    MaxAge:   60 * 5,
    HttpOnly: true,
}
    if match {
        auth := db.Auth{
            Username:      user.Name,
            Authenticated: true,
        }
        s.Values["Auth"] = auth

        err := s.Save(r, w)
        if err != nil {
            log.Fatal(err)
        }

        http.Redirect(w, r, "/", 302)
r := mux.NewRouter()
r.HandleFunc("/", logged(handlers.Index))
r.HandleFunc("/signup", logged(handlers.Signup))
r.HandleFunc("/login", logged(handlers.Login))
r.HandleFunc("/logout", logged(handlers.Logout))

r.HandleFunc("/user", protect(handlers.User))
r.HandleFunc("/user/{id}", protect(handlers.User))
r.HandleFunc("/users", protect(handlers.Users))
Store.Options = &sessions.Options{
    Path:     "/",
    MaxAge:   60 * 5,
    HttpOnly: true,
}