使用原子 CAS(UPDATE WHERE token_hash = ? AND revoked_at IS NULL) 替代先查后改的非原子操作,防止同一 refresh token 被并发使用两次。 新增 TokenService::validate_and_revoke_atomic 方法,将 JWT 解码、 哈希匹配和 token 撤销合并为单次数据库操作。
使用原子 CAS(UPDATE WHERE token_hash = ? AND revoked_at IS NULL) 替代先查后改的非原子操作,防止同一 refresh token 被并发使用两次。 新增 TokenService::validate_and_revoke_atomic 方法,将 JWT 解码、 哈希匹配和 token 撤销合并为单次数据库操作。