ЦСль:

описаниС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° turnstile Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ SG.

БизнСс Π·Π°Π΄Π°Ρ‡Π°:

Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΈ Ρ„Π΅ΠΉΠΊΠΎΠ²Ρ‹Π΅ рСгистрации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π±ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠ½Ρ‹. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ Π±ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠ½Ρ‹ абузят ΠΏΠ»Π°Ρ‚Π΅ΠΆΠΊΠΈ, Ρ‡Ρ‚ΠΎ нСсСт риски для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

РСшСниС: ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» turnstile.

ОбоснованиС:

ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠ»ΠΎΡ‚Π½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с CloudFlare. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ зависимости ΠΎΡ‚ ΠΈΡ… услуг.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ трСбования:

  • ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ (Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ).
  • ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ sitekey для Ρ€Π°Π·Π½Ρ‹Ρ… api.hostnames.
  • ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ turnstile ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ рСгистрации ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π»ΠΎΠ³ΠΈΠ½Π°.
  • ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΠΊΠ΅Π½Π° turnstile Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π»ΠΎΠ³ΠΈΠ½Π° ΠΈ рСгистрации
  • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ: ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° мноТСства Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ²:

ΠœΡ‹ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство Ρ€Π°Π·Π½Ρ‹Ρ… Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² cloudflare Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находятся Ρ€Π°Π·Π½Ρ‹Π΅ Π΄ΠΎΠΌΠ΅Π½Ρ‹. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ cloudflare, ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π»ΠΈΠΌΠΈΡ‚Ρ‹ cloudflare Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΡΡƒΠ½ΡƒΡ‚ΡŒ всС наши Π΄ΠΎΠΌΠ΅Π½Ρ‹ ΠΈ pages Π² ΠΎΠ΄ΠΈΠ½ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚. ΠŸΡ€ΠΈ этом со стороны cloudflare сущСствуСт привязка - turnstile public key + turnstile secret key = 10 domain names.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ наши Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΈ с turnstile, Ρ‚.ΠΊ. ΠΌΡ‹ Π½Π΅ смоТСм Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡ turnstile Π·Π°ΡΡƒΠ½ΡƒΡ‚ΡŒ всС наши Π΄ΠΎΠΌΠ΅Π½Ρ‹ разбросанныС ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°ΠΌ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ нСобходимости ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ turnstile public key получался с Π±Π΅ΠΊΠ΅Π½Π΄Π°. ΠŸΡ€ΠΈ этом Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π΅ ΠΌΡ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ public/secret key для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ hostname (ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° рСгулярок ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±ΠΎΠ², Π½ΠΎ списком Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ ΠΎΠΊ).

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ схСма Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ сайта Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΎΠΏΡ†ΠΈΡŽ:

$cfg['turnstile'] = true; // enable turnstile integration
$cfg['turnstileKeys'] => [
    'alev.casino' => ['publicKey','privateKey'],
    '*.alev.casino' => ['publicKey','privateKey'],
    '*.alevcasino.com' => ['publicKey','privateKey'],
    '*' => ['publicKey','privateKey'], // default key, used when no match
];
$cfg['turnstile_login'] = true; // server validation for login
$cfg['turnstile_signup'] = true; // for signup
$cfg['turnstile_deposit'] = true; // for deposit

Π’Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

GET /api/v1/turnstile

{
	publicKey: "key",
}

ΠšΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π΄ΠΎΠΌΠ΅Π½Π΅ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» запрос. Π’ случаС получСния запроса с нСизвСстного Π΄ΠΎΠΌΠ΅Π½Π° β€” ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡.

Π’Π°ΠΆΠ½ΠΎ: ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ настройка ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΅Π΅ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π½Π° Π»Π΅Π½Π΄ΠΈΠ½Π³Π°Ρ…, дСлая ΠΎΠ΄ΠΈΠ½ Π΄Π΅ΡˆΠ΅Π²Ρ‹ΠΉ запрос (Π° Π½Π΅ вытягивая ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ для всСго сайта)

ΠœΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ turnstile для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ стоит Π΄Π΅Π½Π΅Π³. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для нас ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ Π»ΠΎΠ³ΠΈΠ½Π°/рСгистрации. Вакая рСализация ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ аттСстация turnstile ΠΈΠΌΠ΅Π΅Ρ‚ врСмя ΠΆΠΈΠ·Π½ΠΈ, ΠΎΠΊΠΎΠ»ΠΎ 5ΠΈ ΠΌΠΈΠ½ΡƒΡ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Ρ‚Ρ‚Π΅ΡΡ‚Π°Ρ†ΠΈΡŽ (ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ) ΠΈΠΌΠ΅Π΅Ρ‚ смысл нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ дСйствиСм. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΈ сэкономим Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ Π½Π° запусках аттСстации ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ лишний Ρ€Π°Π· Π½Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π»ΠΎΠ³ΠΈΠ½Π° ΠΈ рСгистрации ΠΌΡ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ элСмСнт turnstile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ сразу запускал Π°Ρ‚Ρ‚Π΅ΡΡ‚Π°Ρ†ΠΈΡŽ ΠΈ складывал Ρ‚ΠΎΠΊΠ΅Π½ аттСстации Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запроса Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄.

Π‘Π΅ΠΊΠ΅Π½Π΄, обладая private key, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ настоящий Π»ΠΈ Π±Ρ‹Π» использован Ρ‚ΠΎΠΊΠ΅Π½. Если ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡƒΡΠΏΠ΅ΡˆΠ½Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΎΠ³ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π² случаС ошибки Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Ρ‡Π°ΡΡ‚ΡŒ

докумСнтация ΠŸΡ€ΠΈΠΌΠ΅Ρ€ скрипта установки ΠΈ запуска turnstile:

<script>
Β  Β  (function() {
Β  Β  Β  console.log("ts loaded");
Β  Β  Β  var tsblock = document.createElement("div");
Β  Β  Β  tsblock.id = "ts";
Β  Β  Β  var modal = document.createElement("div");
Β  Β  Β  modal.style.display = "none";
Β  Β  Β  modal.appendChild(tsblock);
Β  Β  Β  document.body.appendChild(modal);
Β  Β  Β  var onloadTurnstileCallback = function () {
Β  Β  Β  Β  var tsid = turnstile.render(tsblock, {
Β  Β  Β  Β  Β  appearance: "interaction-only",
Β  Β  Β  Β  Β  sitekey: "3x00000000000000000000FF",
Β  Β  Β  Β  Β  action: window.location.hostname.replaceAll('.','_'),
Β  Β  Β  Β  Β  callback: function (token) {
Β  Β  Β  Β  Β  Β  console.log("Challenge Success token", token);
Β  Β  Β  Β  Β  Β  modal.style.display = "none";
Β  Β  Β  Β  Β  Β  turnstile.remove(tsid);
Β  Β  Β  Β  Β  Β  sessionStorage.setItem("ts", true);
Β  Β  Β  Β  Β  },

Β  Β  Β  Β  Β  "before-interactive-callback": function (before) {
Β  Β  Β  Β  Β  Β  Β modal.style =
Β  Β  Β  Β  Β  Β  Β  Β "position: fixed;width: 100vw;height: 100vh;left: 0;top: 0;z-index: 9999;background-color: #00000076;display: flex;justify-content: center;align-items: center;backdrop-filter: blur(6px);";
Β  Β  Β  Β  Β  Β  Β dataLayer.push({ event: "turnStyleLaunched" });
Β  Β  Β  Β  Β  },
Β  Β  Β  Β  Β  "error-callback": function (err) {
Β  Β  Β  Β  Β  Β  dataLayer.push({ event: "turnStyleError", turnStyleError: err });
Β  Β  Β  Β  Β  Β  console.log("error", err);
Β  Β  Β  Β  Β  },
Β  Β  Β  });
Β  Β  };
Β  Β  const script = document.createElement('script');
Β  Β  script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js??render=explicit';
Β  Β  script.type = 'text/javascript';
Β  Β  script.onload=onloadTurnstileCallback;
Β  Β  script.defer = true;
Β  Β  document.head.appendChild(script);
Β  })();
Β  </script>

БСйчас ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ скрипт Π±Π»ΠΈΠ·ΠΊΠΈΠΉ ΠΊ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ для установки turnstile Π½Π° сайт. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° тСстовом сайтС β€” ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ страницы всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° тСстовая аттСстация.

Π’Π°ΠΆΠ½Ρ‹Π΅ для нас ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ turnstyle Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ render=explicit. Он Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ turnstile Π½Π΅ Π»Π΅Π· Π² наш Π΄ΠΎΠΌ ΠΈ Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π» сам Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² Π½Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ сами Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½.

На ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ асинхронно, сильно ΠΏΠΎΠ·ΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ основного сайта, Π½ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎ открытия Ρ„ΠΎΡ€ΠΌΡ‹ рСгистрации/Π»ΠΎΠ³ΠΈΠ½Π°.

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π΅ элСмСнт, Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈ нСобходимости Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ прохоТдСния ΠΊΠ°ΠΏΡ‚Ρ‡ΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скрытый элСмСнт, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅.

ПослС создания DOM элСмСнта ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ turnstile.render(domElement, options), Π³Π΄Π΅ domElement это скрытый элСмСнт, Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠΌ turnstile. Π’Π°ΠΊ ΠΆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ настройки запуска:

  • appearance: "interaction-only": для нас это самая ваТная настройка. Она Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ turnstile, Ссли аттСстация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΡƒΡΠΏΠ΅ΡˆΠ½Π°. Благодаря Π½Π΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ запрос Π½Π° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ чСловСчности.
  • sitekey: "xxx",: сюда ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ связанный с нашим Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΈΠ· api ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π½Π΅Π΅)
  • action: window.location.hostname.replaceAll('.','_'): это ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»ΠΈ cloudflare. Π£Π΄ΠΎΠ±Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сюда hostname Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π°ΠΏΡƒΡ‰Π΅Π½ turnstile, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ статистику Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… Π΄ΠΎΠΌΠ΅Π½ΠΎΠ². turnstile-action-analitics.png Π’Π°ΠΊ ΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысл, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сюда Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ которая осущСствляСтся, login, signup ΠΈΠ»ΠΈ deposit. ЀактичСски это ΠΊΠ»ΡŽΡ‡ для раздСлСния статистики Π²Π½ΡƒΡ‚Ρ€ΠΈ Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»ΠΈ cloudlare.
  • callback: function (token) - это функция Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Ρ‚ΠΎΠΊΠ΅Π½. Π•Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡ†Π΅ΠΏΠΈΡ‚ΡŒ ΠΊ списку ΠΏΠΎΠ»Π΅ΠΉ отправляСмых вмСстС с Ρ„ΠΎΡ€ΠΌΠΎΠΉ. БобствСнно этот Ρ‚ΠΎΠΊΠ΅Π½ это ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ аттСстации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π°Π»Π΅Π΅ Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π΅.
  • "before-interactive-callback": function (before): этот Π²Ρ‹Π·ΠΎΠ² происходит ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Ссли ΠΎΠ½ΠΎ всС ΠΆΠ΅ понадобилось. Π’ этом мСстС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π½Π½Π΅Π΅ скрытый элСмСнт, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½ Π±Π»ΠΎΠΊ turnstile
  • "error-callback": function (err): Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄ΡƒΡ‚ ошибки, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠ°ΠΊ прохоТдСния аттСстации, Ρ‚Π°ΠΊ ΠΈ просто ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°.

Аналитика

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отправляСм Π² Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ события:

  • turnStyleLaunched: Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ это событиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стригСрили Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π°Ρ‚Ρ‚Π΅ΡΡ‚Π°Ρ†ΠΈΡŽ.
  • turnStyleError: Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ это событиС, с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ с описаниСм ошибки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρƒ людСй пошло Π½Π΅ Ρ‚Π°ΠΊ. Бписок Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ошибок

Нам Π’ΠΠ–ΠΠž ΠΈΠΌΠ΅Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ Π² Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ΅.

БСрвСрная валидация Ρ‚ΠΎΠΊΠ΅Π½Π° аттСстации

РСализация ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° сСрвСрС, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° php. БобствСнно для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ всСго лишь: ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ ip с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡˆΠ΅Π» запрос. На Π±Π°Π·Π΅ этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ провСдСния аттСстации ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

Π’ΠΠ–ΠΠž: Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ всС запросы ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ аттСстованы, с сохранСниСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° cfray. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ этого Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° являСтся ΠΠ•ΠžΠ‘Π₯ΠžΠ”Π˜ΠœΠ«Πœ Π£Π‘Π›ΠžΠ’Π˜Π•Πœ для рассмотрСния со стороны CF ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ² связанных с ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ turnstile. Нам Π²Π°ΠΆΠ½ΠΎ вСсти Π»ΠΎΠ³, всСх ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Ρ… аттСстаций ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² CFRay.

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: CF ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ hostname ΠΏΡ€ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°. Π’Π°ΠΆΠ½ΠΎ это Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ этого Π½Π΅Ρ‚)

ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ

ПослС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π»ΠΎΠ³ΠΈΠ½Π° ΠΈ рСгистрации ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΡΡ‚ΡŒΡΡ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°.