45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"xingfucha-server/app/main/model"
|
|
"xingfucha-server/common/ctxdata"
|
|
"xingfucha-server/common/xerr"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/zeromicro/go-zero/rest/httpx"
|
|
)
|
|
|
|
type UserAuthInterceptorMiddleware struct {
|
|
UserModel model.UserModel
|
|
}
|
|
|
|
func NewUserAuthInterceptorMiddleware(userModel model.UserModel) *UserAuthInterceptorMiddleware {
|
|
return &UserAuthInterceptorMiddleware{UserModel: userModel}
|
|
}
|
|
|
|
func (m *UserAuthInterceptorMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
claims, err := ctxdata.GetClaimsFromCtx(r.Context())
|
|
if err != nil {
|
|
httpx.Error(w, errors.Wrapf(xerr.NewErrCode(ErrCodeUnauthorized), "token解析失败: %v", err))
|
|
return
|
|
}
|
|
if claims.UserType == model.UserTypeTemp {
|
|
httpx.Error(w, errors.Wrapf(xerr.NewErrCode(xerr.USER_NEED_BIND_MOBILE), "token解析失败: %v", err))
|
|
return
|
|
}
|
|
user, err := m.UserModel.FindOne(r.Context(), claims.UserId)
|
|
if err != nil {
|
|
httpx.Error(w, errors.Wrapf(xerr.NewErrCode(ErrCodeUnauthorized), "用户不存在: %v", err))
|
|
return
|
|
}
|
|
if user.Disable == model.UserDisableBanned {
|
|
httpx.Error(w, xerr.NewErrCode(xerr.USER_DISABLED))
|
|
return
|
|
}
|
|
next(w, r)
|
|
}
|
|
}
|