Ana içeriğe atla
verifySolution(), tarayıcının tüm challenge token’larını doğru şekilde çözüp çözmediğini kontrol etmek için verify uç noktanızda sunucu tarafında çağrılır. JWT imzasını, token sona ermesini, SHA-256 hash kanıtını kontrol eder ve (varsayılan olarak) token yeniden kullanımını engeller.

İçe aktarma

import { verifySolution } from 'ribaunt';

İmza

function verifySolution(
  token: ChallengeToken | ChallengeToken[],
  nonce: number | string | Array<number | string> | ChallengeSolution | ChallengeSolution[],
  options?: VerifySolutionOptions
): Promise<boolean>

Parametreler

token
ChallengeToken | ChallengeToken[]
gerekli
createChallenge() tarafından döndürülen orijinal JWT token(lar)ı. Challenge uç noktanızın verdiği token’ların aynısını iletin.
nonce
number | string | Array<number | string> | ChallengeSolution | ChallengeSolution[]
gerekli
Tarayıcı tarafından gönderilen çözüm(ler). Şunlar olabilir:
  • Tek bir nonce dizesi
  • Nonce dizelerinden oluşan bir dizi
  • Bir ChallengeSolution nesnesi { nonce: string; hash: string }
  • ChallengeSolution nesnelerinden oluşan bir dizi (widget’ın solutions olarak gönderdiği)
options
VerifySolutionOptions
İsteğe bağlı yapılandırma nesnesi. Aşağıdaki seçenekler tablosuna bakın.

Seçenekler

SeçenekTürVarsayılanAçıklama
replayPrevention`‘local''remote''disabled’`'local'Token yeniden kullanımının nasıl engelleneceğini kontrol eder
replayStoreReplayStoreundefinedreplayPrevention 'remote' olduğunda gereklidir. consume() yöntemini uygular.
debugbooleanotomatik (geliştirmede true)Doğrulama uyarılarını konsola kaydeder
onWarning(warning: VerifyWarning) => voidundefinedYapılandırılmış uyarı olayları için geri çağrı

Dönüş değeri

Promise<boolean>. Yalnızca TÜM token’lar geçerli çözümlere sahipse ve yeniden oynatma kontrollerinden geçerse true döndürür. Herhangi bir başarısızlık durumunda hata fırlatmadan false döndürür.

Örnekler

Temel kullanım:
const { tokens, solutions } = req.body;
const valid = await verifySolution(tokens, solutions);
Yapılandırılmış uyarı telemetrisi ile:
const valid = await verifySolution(tokens, solutions, {
  onWarning: (warning) => {
    // warning.reason: 'invalid-token' | 'expired-token' | 'invalid-solution' | 'replay-detected' | 'configuration-error'
    console.log('captcha warning', warning.reason, warning.message);
  },
});
Uzak yeniden oynatma deposu ile:
const valid = await verifySolution(tokens, solutions, {
  replayPrevention: 'remote',
  replayStore: {
    consume: async (jti, expiresAt) => {
      // Atomic set-if-not-exists with TTL (e.g. Redis SET NX EX)
      return await redis.set(jti, '1', 'NX', 'EXAT', expiresAt) !== null;
    },
  },
});

Uyarı sebepleri

SebepAçıklama
invalid-tokenJWT imzası geçersiz veya bozuk
expired-tokenChallenge TTL’si geçmiş
invalid-solutionNonce geçerli bir hash üretmiyor
replay-detectedToken zaten tüketilmiş
configuration-errorreplayPrevention 'remote' ancak replayStore sağlanmamış