The Cloudflare Turnstile Client Side Rendering for React and NextJS
npm install turnstile-nextThis is a React component that can be used to protect your React and NextJS applications with Cloudflare Access.
``bash`
npm install --save turnstile-next
or
`bash`
yarn add turnstile-next
In your layout or page, import the TurnstileNextContext and use it your page or layout like so:
`jsx
import TurnstileContext from 'turnstile-next/vercel';
export default function Layout({ children }) {
return (
<>
only cloudflare script tag is included here.
Usage With Vite
In your
index.html file, use the cloudflare script tag like so:`html
`and you can use the
TurnstileInput component like so:`tsx
import TurnstileInput from 'turnstile-next';const SITE_KEY = import.meta.env.VITE_SITE_KEY;
export default function MyComponent() {
const onVerify = (token : string) => {
console.log(token);
}
const onErr = (err : string) => {
console.log(err);
}
return (
);
}
`Usage In Component
`tsx
import TurnstileInput from 'turnstile-next';const SITE_KEY = process.env.NEXT_PUBLIC_SITE_KEY;
export default function MyComponent() {
const onVerify = (token : string) => {
console.log(token);
}
const onErr = (err : string) => {
console.log(err);
}
return (
<>
>
);
}
`Usage
The
TurnstileInput component accepts a set of properties that are used to configure the Turnstile challenge. Here's a detailed description of each property:| Property | Description |
| -------------------- | --------------------------------------------------------------------------------------------------- |
| siteKey _(required)_ | The site key for your Turnstile challenge. This key is obtained from the Turnstile dashboard. |
| theme | The theme of the challenge. Defaults to "auto". |
| locale | The locale of the challenge. Defaults to "en". |
| size | The size of the challenge. Defaults to "normal". |
| fieldName | The name of the field that will be used to store the token. Defaults to "cf-turnstile-token". |
| retryInterval | The interval in milliseconds to retry the challenge. Defaults to 8000. |
| retry | Whether to retry the challenge. Defaults to true. |
| refreshOnExpired | Whether to refresh the challenge when it expires. Defaults to "auto". |
| onVerify | A callback that will be called when the challenge is verified. |
| onError | A callback that will be called when the challenge fails. |
| onExpire | A callback that will be called when the challenge expires. |
| onBeforeInteractive | A callback that will be called when the challenge is about to be interactive. |
| onAfterInteractive | A callback that will be called when the challenge is interactive. |
| onUnsupported | A callback that will be called when the challenge is unsupported by the user's browser. |
For detailed information on each property and its usage, please refer to the Turnstile documentation.
utils
$3
This function can be used to refresh the Turnstile challenge. It accepts a single parameter,
options, which is an object that can be used to configure the refresh. Here's a detailed description of each property:| Property | Description |
| -------------------- | --------------------------------------------------------------------------------------------------- |
| className | The class name of the Turnstile challenge. Defaults to "cf-turnstile". |
example:
`tsx
import { refreshTurnstile } from 'turnstile-next/utils';const refresh = () => {
refreshTurnstile({ className: 'cf-turnstile' });
};
export default function MyComponent() {
return (
<>
>
);
}
`$3
This function can be used to check if the Turnstile challenge has been rendered.
example:
`tsx
import { useEffect } from 'react';
import { checkWidgetRender } from 'turnstile-next/utils';export default function MyComponent() {
useEffect(() => {
checkWidgetRender();
}, []);
return (
<>
My Component
>
);
}
``Contributions are always welcome!