Golang gorilla/会话和URI范围?
我还是新来的。。。这很奇怪 我有一个简单的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完成的。因此,无论哪种方式,代码都应该是相同的 有人能指出我遗漏了什么吗 提前谢谢Golang gorilla/会话和URI范围?,go,Go,我还是新来的。。。这很奇怪 我有一个简单的web应用程序,使用Gorilla会话进行身份验证。我将会话对象Auth存储在NewCookieStore中 如果我浏览到/users,我的代码302将重定向到/login。我登录后它就工作了。我可以转到/users,然后单击/user/1234即可 如果我直接输入/user/1234,它会正确重定向到/login,让我登录,我的UI会在标题中显示Auth变量。但它无法从会话中获取Auth对象 如果我将URL展平为/users和/1234,它将正常工作
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,
}