Use Cases

Gérer les CAPTCHA sur des pages Supabase protégées par RLS

Périmètre sûr : Ce guide s'applique uniquement à vos propres applications, à vos environnements de QA ou de production, ou à des systèmes pour lesquels vous détenez une autorisation écrite. Il ne couvre pas l'automatisation de sites tiers.

Sur une page Supabase protégée par row-level security, la difficulté n'est pas de « franchir » le RLS : c'est de résoudre le CAPTCHA sans casser la session authentifiée que votre application attend déjà. Ce guide branche CaptchaAI sur ce flux — QA, reproduction de tickets support ou automatisation autorisée — sans réécrire votre architecture.

Pourquoi le RLS ne change rien à la résolution

Le row-level security filtre, côté base, les lignes qu'un rôle authentifié peut lire ou écrire. Le CAPTCHA, lui, protège l'entrée du flux : connexion, inscription ou action sensible. Les deux couches sont orthogonales : résoudre le CAPTCHA ne « débloque » aucune politique RLS. Il vous laisse franchir l'étape de vérification pour que la session — et le contexte RLS associé — reste valide.

Le périmètre autorisé

Ce cas d'usage suppose une base claire : vos propres applications, un client qui a autorisé l'intégration, ou un accord de collecte avec la source. Encadrez la collecte selon vos obligations RGPD et minimisez les données personnelles qui transitent par vos journaux de test.

Architecture du pipeline

  1. L'orchestrateur pilote la séquence et n'appelle CaptchaAI qu'aux étapes où un défi apparaît ; tout le reste n'est qu'une série d'appels HTTP vers votre backend Supabase.
  2. Le solveur reçoit les paramètres du défi — sitekey et URL de la page — puis renvoie un token.
  3. Votre code injecte ce token dans la requête suivante, à l'intérieur de la session qui a déclenché le défi.

Exemple : créer une tâche Turnstile depuis vos tests

Voici un appel côté client, tiré d'une suite de tests que vous exécutez sur votre propre application :

import fetch from 'node-fetch';

const API_KEY = process.env.CAPTCHAAI_KEY;

export async function createTurnstileTask(siteKey, pageUrl) {
  const res = await fetch('https://api.captchaai.com/createTask', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      clientKey: API_KEY,
      task: {
        type: 'TurnstileTaskProxyless',
        websiteURL: pageUrl,
        websiteKey: siteKey,
      },
    }),
  });
  const data = await res.json();
  return data.taskId;
}

Préserver la session après résolution

Le token doit être réappliqué dans la session qui a déclenché le défi :

  • le même contexte de navigateur ;
  • le même client HTTP ;
  • les mêmes cookies.

C'est l'erreur la plus fréquente : une session différente entraîne un rejet après résolution. Avec un navigateur headless, réinjectez le token dans la page déjà ouverte, jamais dans une nouvelle instance.

Observabilité et journalisation

Instrumentez les appels au solveur pour obtenir des métriques exploitables : durée d'obtention du token, code retour HTTP et identifiant de tâche. Séparez les journaux par environnement et corrélez chaque identifiant à votre traçage distribué (OpenTelemetry) : vous rejouerez un scénario complet à partir d'un seul identifiant et réduirez le temps de diagnostic.

Robustesse et stratégie de retry

Trois éléments rendent le pipeline opérable : des codes retour tracés, un retry idempotent et une alerte en cas d'écart durable. Bornez le retry — trois tentatives, un backoff exponentiel plafonné à 30 s — et tracez chaque échec terminal. La facturation de CaptchaAI reposant sur les threads (BASIC à $15/mois, 5 threads, résolutions illimitées), ce sont les boucles de retry incontrôlées qui pèsent le plus sur le coût par résolution.

Liste de contrôle avant la mise en production

  1. Périmètre limité à vos applications ou à des sources autorisées.
  2. Clé CaptchaAI dans un secret CI ou un coffre, jamais dans le code.
  3. Durées d'appel et codes retour tracés à chaque exécution.
  4. Token injecté dans la session qui a déclenché le défi.
  5. Retry idempotent et borné sur les erreurs transitoires.
  6. Tests rejouables depuis votre intégration continue.

FAQ

Faut-il injecter le token dans la même session Supabase ?

Oui, c'est la règle essentielle. Le token doit repartir dans le même contexte de navigateur ou le même client HTTP que celui qui a déclenché le défi, avec les mêmes cookies. Une session différente entraîne presque toujours un rejet.

CaptchaAI prend-il en charge hCaptcha sur ces pages ?

Non — pas encore pris en charge. CaptchaAI résout reCAPTCHA v2 et v3, Cloudflare Turnstile et Challenge, GeeTest v3, ainsi que les CAPTCHA image/OCR et en grille. Vérifiez le type de défi présent sur votre page avant d'intégrer.

Où stocker la clé API dans un pipeline CI ?

Dans un secret d'intégration continue ou un coffre (par exemple les secrets GitHub Actions), jamais en clair dans le dépôt. Injectez-la comme variable d'environnement et prévoyez une alerte de solde.

Le RLS de Supabase bloque-t-il la résolution du CAPTCHA ?

Non. Le row-level security s'applique côté base, indépendamment du défi CAPTCHA. Résoudre le CAPTCHA n'accorde aucun droit : votre rôle reste soumis aux mêmes politiques RLS.

Guides connexes

Fiabilisez vos workflows CAPTCHA avec une méthode reproductible. — Obtenez votre clé CaptchaAI.

Les commentaires sont désactivés pour cet article.