import (
"net/http"
"x_dream/types"
"x_dream/response"
"github.com/zeromicro/go-zero/rest"
)
func Router() (r []rest.Route) {
r = []rest.Route{
//add_router(types.POST,"/live/warn",response.WrapResponse(controller.LiveWarn)),
add_router(types.POST,"/check/login",response.WrapResponse(Login)),
add_router(types.POST,"/check/refresh/token",response.WrapResponse(RefreshToken)),
}
return r
}
func add_router(method_type string, path string, handler http.HandlerFunc) rest.Route {
return rest.Route{
Method: method_type,
Path: path,
Handler: handler,
}
}
package response
import "fmt"
import "net/http"
import "google.golang.org/grpc/status"
import "github.com/pkg/errors"
import "github.com/zeromicro/go-zero/rest/httpx"
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
type CodeError struct {
errCode int
errMsg string
}
func (e *CodeError) GetErrCode() int {
return e.errCode
}
func (e *CodeError) GetErrMsg() string {
return e.errMsg
}
func (e *CodeError) Error() string {
return fmt.Sprintf("ErrCode:%d,ErrMsg:%s", e.errCode, e.errMsg)
}
func NewErrCodeMsg(errCode int, errMsg string) *CodeError {
return &CodeError{errCode: errCode, errMsg: errMsg}
}
func WrapResponse(fn func(r *http.Request) (interface{}, error)) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
resp, err := fn(r)
if err == nil {
r := &Response{
Code: 0,
Msg: "success",
Data: resp,
}
httpx.WriteJson(w, http.StatusOK, r)
} else {
errcode := int(500)
errmsg := "服务器错误"
causeErr := errors.Cause(err)
if e, ok := causeErr.(*CodeError); ok {
errcode = e.GetErrCode()
errmsg = e.GetErrMsg()
} else {
if gstatus, ok := status.FromError(causeErr); ok {
grpcCode := int(gstatus.Code())
errcode = grpcCode
errmsg = gstatus.Message()
}
}
httpx.WriteJson(w, http.StatusBadRequest, &Response{
Code: errcode,
Msg: errmsg,
Data: nil,
})
}
}
}
我想在response.WrapResponse加入鉴权中间件,check/login不需要鉴权,其它路由都需要鉴权,没有通过显示鉴权错误信息
鉴权代码:
func CheckToken(r *http.Request)(err error){
authorization := (*r).Header.Get("authorization")
exists,err := CheckToken(&authorization);
if err != nil{
return
}
if !exists{
return response.NewErrCodeMsg(100, "已过期,请重新通过refresh_token获取token")
}
return
}
func CheckToken(token *string)(bools bool,err error){
if len(*token) <1{
err = response.NewErrCodeMsg(401, "token为空")
return
}
token_data,err := ParseToken(token)
if err != nil{
err = response.NewErrCodeMsg(300, fmt.Sprintf("%v", err))
return
}