代码之家  ›  专栏  ›  技术社区  ›  colm.anseo

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

  •  0
  • colm.anseo  · 技术社区  · 5 年前

    尝试区分错误的用户cookie错误与使用 gorilla/sessions 例如

    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 包有导出错误 ErrMacInvalid 用于错误的用户cookie。所以通常人们只会检查这个特定的错误,但这是 工作:

    import "github.com/gorilla/securecookie"
    
    if err == securecookie.ErrMacInvalid {
        // bad user-cookie
    } else if err != nil {
        // otherwise internal error
    }
    

    它不起作用的原因-使用说 securecookie.NewCookieStore() 作为会话存储-它将返回类型为的错误 securecookie.MultiError (A) []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 回复  |  直到 5 年前
        1
  •  3
  •   Volker    5 年前

    有更简单的方法吗?

    不,对不起。