package user import ( "context" "mingyang-admin-app-rpc/internal/jwt_manager" "mingyang-admin-app-rpc/internal/util/dberrorhandler" "time" "mingyang-admin-app-rpc/internal/svc" "mingyang-admin-app-rpc/types/app" "github.com/zeromicro/go-zero/core/logx" ) type LogoutUserLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger jwtManager *jwt_manager.JWTManager } func NewLogoutUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LogoutUserLogic { return &LogoutUserLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), jwtManager: jwt_manager.NewJWTManager(&svcCtx.Config.JWTConf, svcCtx.Redis), } } // LogoutUser 用户退出登录 func (l *LogoutUserLogic) LogoutUser(in *app.UserToken) (*app.LogoutUserRequest, error) { // 记录开始时间 start := time.Now() l.Logger.Info("LogoutUser started token =", in.AccessToken) accessToken := in.GetAccessToken() _, err := l.jwtManager.VerifyAccessToken(accessToken) if err != nil { l.Logger.Error("Verify access token failed", "error", err, "time", time.Since(start)) return nil, dberrorhandler.DefaultEntError(l.Logger, err, in) } err = l.jwtManager.BlacklistToken(accessToken) if err != nil { l.Logger.Error("Blacklist token failed", "error", err, "time", time.Since(start)) return nil, dberrorhandler.DefaultEntError(l.Logger, err, in) } return &app.LogoutUserRequest{ AccessToken: accessToken, }, nil }