← Cloudflare Turnstile / turnstile / troubleshooting
Проверьте свою реализацию Turnstile
Используйте тестовые sitekey и секретные ключи, чтобы проверить свою реализацию Turnstile, не запуская настоящие проверки, которые мешали бы наборам автотестов.
Наборы автотестов (например, Selenium, Cypress или Playwright) Turnstile распознаёт как ботов, из-за чего возможны:
- Падение тестов, когда Turnstile блокирует автоматизированные браузеры
- Непредсказуемые результаты тестов из-за различий в проверках
- Помехи при тестировании отправки формы
- Трудности с тестированием полных пользовательских сценариев
Тестовые ключи (dummy keys) решают эту задачу: они дают предсказуемые, управляемые ответы, которые работают с инструментами автоматического тестирования.
Тестовые sitekey
| Sitekey | Поведение | Тип виджета | Сценарий использования |
|---|---|---|---|
1x00000000000000000000AA |
Всегда проходит | Видимый | Проверка успешной отправки форм |
2x00000000000000000000AB |
Всегда не проходит | Видимый | Проверка обработки ошибок и логики повторных попыток |
1x00000000000000000000BB |
Всегда проходит | Invisible | Проверка успешных сценариев невидимого виджета |
2x00000000000000000000BB |
Всегда не проходит | Invisible | Проверка обработки ошибок невидимого виджета |
3x00000000000000000000FF |
Принудительно запускает интерактивную проверку | Видимый | Проверка сценариев взаимодействия с пользователем |
Тестовые секретные ключи
Эти секретные ключи используйте для тестирования серверной проверки:
| Секретный ключ | Поведение | Сценарий использования |
|---|---|---|
1x0000000000000000000000000000000AA |
Всегда проходит проверку | Проверка успешной валидации токена |
2x0000000000000000000000000000000AA |
Всегда не проходит проверку | Проверка обработки ошибок валидации |
3x0000000000000000000000000000000AA |
Возвращает ошибку «token already spent» | Проверка обработки повторно отправленного токена |
Внедрение
Локальная разработка
Тестовые ключи работают на любом домене, в том числе:
localhost127.0.0.10.0.0.0- Любой домен разработки
Cloudflare рекомендует, чтобы боевые sitekey не допускали локальные домены (localhost или 127.0.0.1), но пользователи могут добавить локальные домены в список разрешённых доменов в разделе Управление именами хостов. Тестовые sitekey можно использовать с любого домена, в том числе на localhost.
Тестирование на стороне клиента
Замените рабочий sitekey тестовым.
<!-- Development/Testing -->
<div class="cf-turnstile" data-sitekey="1x00000000000000000000AA"></div>
<!-- Production -->
<div class="cf-turnstile" data-sitekey="your-real-sitekey"></div>Тестирование на стороне сервера
Замените рабочий секретный ключ тестовым.
// Environment-based configuration
const SECRET_KEY = process.env.NODE_ENV === 'production'
? process.env.TURNSTILE_SECRET_KEY
: '1x0000000000000000000000000000000AA';
// Use in validation
const validation = await validateTurnstile(token, SECRET_KEY);Настройка окружения
Заведите отдельные ключи для каждой среды.
# .env.development
TURNSTILE_SITEKEY=1x00000000000000000000AA
TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA
# .env.test
TURNSTILE_SITEKEY=2x00000000000000000000AB
TURNSTILE_SECRET_KEY=2x0000000000000000000000000000000AA
# .env.production
TURNSTILE_SITEKEY=your-real-sitekey
TURNSTILE_SECRET_KEY=your-real-secret-keyПоведение тестового токена
Генерация токена
Тестовые sitekey выдают фиктивный токен: XXXX.DUMMY.TOKEN.XXXX
Валидация токена
- Тестовые секретные ключи: принимают только фиктивный токен и отклоняют настоящие.
- Рабочие секретные ключи: принимают только настоящие токены и отклоняют фиктивные.
Ответ проверки
{
"success": true,
"challenge_ts": "2022-02-28T15:14:30.096Z",
"hostname": "localhost",
"error-codes": [],
"action": "test",
"cdata": "test-data"
}{
"success": false,
"error-codes": ["invalid-input-response"]
}{
"success": false,
"error-codes": ["timeout-or-duplicate"]
}Сценарии тестирования
| Тестовый sitekey | Тестовый секретный ключ | Тестовый сценарий |
|---|---|---|
1x00000000000000000000AA |
1x0000000000000000000000000000000AA |
Такое сочетание всегда даёт успешную валидацию. |
2x00000000000000000000AB |
2x0000000000000000000000000000000AA |
Такое сочетание всегда завершается ошибкой. |
1x00000000000000000000AA |
3x0000000000000000000000000000000AA |
Такое сочетание всегда завершается ошибкой "timeout-or-duplicate". |