Turnstile 是 Cloudflare 的智能 CAPTCHA 替代方案。
Turnstile Pages Plugin 验证 Cloudflare Turnstile 令牌。
npm i @cloudflare/pages-plugin-turnstileyarn add @cloudflare/pages-plugin-turnstilepnpm add @cloudflare/pages-plugin-turnstilebun add @cloudflare/pages-plugin-turnstileimport turnstilePlugin from "@cloudflare/pages-plugin-turnstile";
/**
* POST /api/submit-with-plugin
*/
export const onRequestPost = [
turnstilePlugin({
// This is the demo secret key. In prod, we recommend you store
// your secret key(s) safely.
secret: "0x4AAAAAAASh4E5cwHGsTTePnwcPbnFru6Y",
}),
// Alternatively, this is how you can use a secret key which has been stored as an environment variable
// (async (context) => {
// return turnstilePlugin({secret: context.env.SECRET_KEY})(context)
// }),
async (context) => {
// Request has been validated as coming from a human
const formData = await context.request.formData();
// Additional solve metadata data is available at context.data.turnstile
return new Response(
`Successfully verified! ${JSON.stringify(context.data.turnstile)}`,
);
},
];此 Plugin 仅暴露单个路由,用于验证 POST 请求中 cf-turnstile-response 参数的传入 Turnstile 响应。它将在挂载的任何位置可用。在上面的示例中,它挂载在 functions/register.ts 中,因此将验证对 /register 的请求。
Plugin 使用单个对象参数挂载,具有以下属性:
secret ↗ 是必填项,可在 Turnstile 仪表板中找到。
response 和 remoteip 是可选字符串。response 是要验证的 Turnstile 令牌。如果未提供,Plugin 将默认从 multipart/form-data 请求中提取 cf-turnstile-response 值。remoteip 是请求者的 IP 地址,默认为请求的 CF-Connecting-IP 标头。
onError 是可选函数,接受 Pages Function context 对象并返回 Promise<Response>。默认情况下,将返回人类可读的错误 Response。
context.data.turnstile 将在后续 Pages Functions(包括 onError 函数)中填充 Turnstile Siteverify 响应对象。