// Code scaffolded by goctl. Safe to edit. // goctl 1.10.0 package auth import ( "context" "fmt" "perms-system-server/internal/middleware" "perms-system-server/internal/response" "perms-system-server/internal/svc" "github.com/zeromicro/go-zero/core/limit" "github.com/zeromicro/go-zero/core/logx" ) type LogoutLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewLogoutLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LogoutLogic { return &LogoutLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } // Logout 用户注销。递增当前用户的 tokenVersion 使所有已签发的 access/refresh 令牌立即失效,并清除用户缓存。 func (l *LogoutLogic) Logout() error { userId := middleware.GetUserId(l.ctx) if userId == 0 { return response.ErrUnauthorized("未登录") } if l.svcCtx.TokenOpLimiter != nil { code, _ := l.svcCtx.TokenOpLimiter.Take(fmt.Sprintf("logout:%d", userId)) if code == limit.OverQuota { return response.ErrTooManyRequests("操作过于频繁,请稍后再试") } } if _, err := l.svcCtx.SysUserModel.IncrementTokenVersion(l.ctx, userId); err != nil { return err } l.svcCtx.UserDetailsLoader.Clean(l.ctx, userId) return nil }