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

问题描述 投票:2回答:1

尝试使用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包有一个导出的错误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值的类型为[]errorsecurecookie.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
}

有没有更简单的方法?

session go cookies error-handling gorilla
1个回答
3
投票

有没有更简单的方法?

不,抱歉。

© www.soinside.com 2019 - 2024. All rights reserved.