如题
[zeromicro/go-zero]httpx 设置 errorhandler 在jwt认证失败时未生效
回答
go-zero 版本 github.com/tal-tech/go-zero v1.1.3
能否贴上测试代码?谢谢!
// 自定义错误 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)
问题已解决,修改 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)
}
你提交一个PR?
不改框架的代码的话,最新版本里这个应该给server 设置rest.WithUnauthorizedCallback 然后在Callback函数里调用httpx.Error(),实现对自定义的errorhandler的调用