从多重错误类型检测特定错误

时间:2019-03-06 20:15:59

标签: session go cookies error-handling gorilla

尝试使用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
}

有没有更简单的方法?

1 个答案:

答案 0 :(得分:3)

  

有没有更简单的方法?

不。抱歉。