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

尝试区分错误的用户 cookie 错误与使用gorilla/sessionseg 的内部错误


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

}

它不起作用的原因 - 使用 say作为会话存储 - 是它将返回类型为securecookie.MultiError (一种类型)securecookie.NewCookieStore()的错误,其值列在错误片中。[]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

}

有更容易的方法吗?


慕勒3428872
浏览 100回答 1
1回答

MYYA

有更容易的方法吗?不,对不起。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go