1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package middleware
- import (
- "context"
- "github.com/casbin/casbin/v2"
- "github.com/redis/go-redis/v9"
- "github.com/spf13/cast"
- "github.com/suyuan32/simple-admin-common/enum/errorcode"
- "github.com/suyuan32/simple-admin-core/rpc/coreclient"
- "github.com/zeromicro/go-zero/core/errorx"
- "github.com/zeromicro/go-zero/core/logx"
- "github.com/zeromicro/go-zero/rest/httpx"
- "net/http"
- "wechat-api/internal/config"
- jwtutils "wechat-api/internal/utils/jwt"
- )
- type MiniprogramMiddleware struct {
- Cbn *casbin.Enforcer
- Rds redis.UniversalClient
- CoreRpc coreclient.Core
- Config config.Config
- }
- func NewMiniprogramMiddleware(cbn *casbin.Enforcer, rds redis.UniversalClient, core coreclient.Core, c config.Config) *MiniprogramMiddleware {
- return &MiniprogramMiddleware{
- Cbn: cbn,
- Rds: rds,
- CoreRpc: core,
- Config: c,
- }
- }
- func (m *MiniprogramMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- tokenStr := jwtutils.StripBearerPrefixFromToken(r.Header.Get("Authorization"))
- claims, err := jwtutils.ParseJwtToken(m.Config.Auth.AccessSecret, tokenStr)
- if err != nil {
- logx.Errorw("check user auth error", logx.Field("detail", err.Error()))
- httpx.Error(w, errorx.NewApiError(http.StatusInternalServerError, err.Error()))
- return
- }
- jwtUid, ok := claims["userId"]
- userId := cast.ToUint64(jwtUid)
- if ok && userId > 0 {
- r = r.WithContext(context.WithValue(r.Context(), "userId", userId))
- next(w, r)
- return
- } else {
- logx.Errorw("User need to login in to access the resource")
- httpx.Error(w, errorx.NewCodeError(errorcode.PermissionDenied, "User need to login in to access the resource"))
- return
- }
- }
- }
|