Tencent/WeKnora · error
refresh token is revoked
Error message
refresh token is revoked
What it means
Raised in RefreshToken when the token row exists but IsRevoked is true (or the row lookup failed) — the presented refresh token was already revoked (logout, rotation, or admin revocation) and must not be honored. Reuse-detection guard against replayed tokens.
Source
Thrown at internal/application/service/user.go:1347
claims, ok := token.Claims.(jwt.MapClaims)
if !ok {
return "", "", errors.New("invalid token claims")
}
tokenType, ok := claims["type"].(string)
if !ok || tokenType != "refresh" {
return "", "", errors.New("not a refresh token")
}
userID, ok := claims["user_id"].(string)
if !ok {
return "", "", errors.New("invalid user ID in token")
}
// Check if token is revoked
tokenRecord, err := s.tokenRepo.GetTokenByValue(ctx, refreshTokenString)
if err != nil || tokenRecord == nil || tokenRecord.IsRevoked {
return "", "", errors.New("refresh token is revoked")
}
if tokenRecord.TokenType != "refresh_token" {
return "", "", errors.New("not a refresh token")
}
// Get user
user, err := s.userRepo.GetUserByID(ctx, userID)
if err != nil {
return "", "", err
}
// Revoke old refresh token
tokenRecord.IsRevoked = true
_ = s.tokenRepo.UpdateToken(ctx, tokenRecord)
// Generate new tokens
return s.GenerateTokens(ctx, user)
}View on GitHub (pinned to 988cbb0330)
Solutions
- Reject with 401 and require re-authentication
- If rotation is in use, treat repeated use of the revoked token as a possible replay and revoke the family
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at internal/application/service/user.go:1347 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/4ff751002e8f3c03.
Report an issue: GitHub.