[zeromicro/go-zero]httpx 设置 errorhandler 在jwt认证失败时未生效

2024-03-08 871 views
5

如题

回答

3

go-zero 版本 github.com/tal-tech/go-zero v1.1.3

1

能否贴上测试代码?谢谢!

1

// 自定义错误 type ErrorX interface { Error() string Code() int }

// go zero 错误处理函数 func HandlerForGoZero(err error) (int, interface{}) { var code int if errX, ok := err.(ErrorX); ok { code = errX.Code() } else { code = -1 } return http.StatusConflict, struct { Code int json:"Code" Msg string json:"Msg" }{ Code: code, Msg: err.Error(), } }

// 在main 函数中添加 errorhandler httpx.SetErrorHandler(errorx.HandlerForGoZero)

7

问题已解决,修改 rest/handler/authhandler.go 将 unauthorized 增加一行即可

func unauthorized(w http.ResponseWriter, r *http.Request, err error, callback UnauthorizedCallback) { writer := newGuardedResponseWriter(w)

if err != nil {
    detailAuthLog(r, err.Error())
} else {
    detailAuthLog(r, noDetailReason)
}
if callback != nil {
    callback(writer, r, err)
}
httpx.Error(w,err) // 增加的内容
writer.WriteHeader(http.StatusUnauthorized)

}

9

你提交一个PR?

5

不改框架的代码的话,最新版本里这个应该给server 设置rest.WithUnauthorizedCallback image 然后在Callback函数里调用httpx.Error(),实现对自定义的errorhandler的调用