尝试使用gorilla/sessions
来区分用户Cookie错误和内部错误,
import "github.com/gorilla/sessions"
sess, err := store.Get(r, sessName)
if err != nil {
// either user error (bad-cookie i.e. invalid HMAC)
// http.Error(w, "not authenticated", http.StatusUnauthorized)
// or server error (FileSystemStore i/o)
// http.Error(w, "internal error", http.StatusInternalServerError)
return
}
基础securecookie
程序包因用户Cookie错误而导出了错误ErrMacInvalid
。因此,通常情况下,您只会检查此特定错误,但这不有效:
import "github.com/gorilla/securecookie"
if err == securecookie.ErrMacInvalid {
// bad user-cookie
} else if err != nil {
// otherwise internal error
}
它不起作用的原因-使用说securecookie.NewCookieStore()
作为会话存储-是它将返回类型securecookie.MultiError的错误
(一种[]error
类型),并且在错误切片中列出了securecookie.ErrMacInvalid
值。
尝试这样的操作似乎很麻烦:
if e2, ok := err.(securecookie.MultiError); ok && len(e2) > 0 && e2[0] == securecookie.ErrMacInvalid { {
// bad user-cookie
} else if err != nil {
// otherwise internal error
}
有没有更简单的方法?
答案 0 :(得分:3)
有没有更简单的方法?
不。抱歉。