UNPKG

vue3-recaptcha-v2

Version:

reCAPTCHA for Vue3 : CompositionAPI, Types

201 lines (147 loc) 7.5 kB
# vue3-recaptcha-v2 ![GitHub package.json version](https://img.shields.io/github/package-json/v/dongkyuuuu/vue3-recaptcha-v2) ![npm bundle size](https://img.shields.io/bundlephobia/min/vue3-recaptcha-v2) ![NPM](https://img.shields.io/npm/l/vue3-recaptcha-v2) reCAPTCHA v2 for Vue3 and Nuxt3. ## Installation install the packge from `yarn`: ```sh $ yarn add vue3-recaptcha-v2 ``` In `Vue3`, add it to your `main.ts file`: ```typescript import { createApp } from "vue"; import App from "./App.vue"; import { install } from "vue3-recaptcha-v2"; createApp(App) .use(install, { sitekey: "YOUR_SITE_KEY", cnDomains: false, // Optional, If you use in China, set this value true }) .mount("#app"); ``` In `Nuxt3`, add it to your `plugin folder`: The file name must contain the `.client`. ```typescript // <ProjectRoot>/plugins/recaptcha.client.ts import { install } from "vue3-recaptcha-v2"; export default defineNuxtPlugin((nuxtApp) => { nuxtApp.vueApp.use(install, { sitekey: "YOUR_SITE_KEY", cnDomains: false, }); }); ``` ### Dynamic SiteKey If you want to add siteKey dynamically, follow this step. **IMPORTANT::: The reCAPTCHA widget is rendered once, so changes to the siteKey after rendering will not be reflected.** ```typescript import { createApp } from "vue"; import App from "./App.vue"; import { install } from "vue3-recaptcha-v2"; createApp(App) .use(install) // Do not add siteKey when initialize app .mount("#app"); ``` ```vue <script setup lang="ts"> import { RecaptchaV2 } from "vue3-recaptcha-v2"; </script> <template> <RecaptchaV2 :sitekey="YOUR_SITE_KEY" /> </template> ``` More detail about install options, you can check this [Install Options](#install-options) ## Usage The components used are the same for `Vue3` and `Nuxt3`. Only the installation is different. For more information, including the props to `change the language(hl option)`, check [Component Options](#component-options) ```vue <script setup lang="ts"> import { RecaptchaV2 } from "vue3-recaptcha-v2"; const handleWidgetId = (widgetId: number) => { console.log("Widget ID: ", widgetId); }; const handleErrorCallback = () => { console.log("Error callback"); }; const handleExpiredCallback = () => { console.log("Expired callback"); }; const handleLoadCallback = (response: unknown) => { console.log("Load callback", response); }; </script> <template> <RecaptchaV2 @widget-id="handleWidgetId" @error-callback="handleErrorCallback" @expired-callback="handleExpiredCallback" @load-callback="handleLoadCallback" /> </template> ``` ### Invisible widget ```vue <script setup lang="ts"> import { RecaptchaV2, useRecaptcha } from "vue3-recaptcha-v2"; const { handleExecute } = useRecaptcha(); const handleWidgetId = (widgetId: number) => { console.log("Widget ID: ", widgetId); handleExecute(widgetId); }; </script> <template> <RecaptchaV2 @widget-id="handleWidgetId" size="invisible" /> </template> ``` ### Reset widget Resets the reCAPTCHA widget. ```vue <script setup lang="ts"> import { RecaptchaV2, useRecaptcha } from "vue3-recaptcha-v2"; const { handleReset } = useRecaptcha(); const handleWidgetId = (widgetId: number) => { console.log("Widget ID: ", widgetId); handleReset(widgetId); }; </script> <template> <RecaptchaV2 @widget-id="handleWidgetId" /> </template> ``` ### Get response widget Gets the response for the reCAPTCHA widget. ```vue <script setup lang="ts"> import { RecaptchaV2, useRecaptcha } from "vue3-recaptcha-v2"; const { handleGetResponse } = useRecaptcha(); const handleWidgetId = (widgetId: number) => { console.log("Widget ID: ", widgetId); handleGetResponse(widgetId); }; </script> <template> <RecaptchaV2 @widget-id="handleWidgetId" /> </template> ``` ## Options ### Install Options | Options | Type | Required | Description | | | ----------- | -------- | -------- | ------------------------------------------------------------------------------------------------------ | --- | | `sitekey` | `string` | true | recaptcha siteKey | | | `cnDomains` | `string` | | default is `false`. if you set `true`, script url is replace `www.google.com` with `www.recaptcha.net` | | ### Component Options #### Props | Options | Type | Required | Description | | ---------- | ------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------- | | `language` | `string` | | recaptcha language, you can find code in [language code](https://developers.google.com/recaptcha/docs/language) | | `theme` | `light` \| `dark` | | default is `light`, recaptcha theme | | `tabindex` | `number` | | default is `0`, tabindex | | `size` | `normal` \| `comapact` \| `invisible` | | default is `normal`, recaptcha widget size | #### emits | Options | Type | Required | Description | | ------------------ | -------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `widget-id` | `(value:number)=>void` | | when recaptcha widget is created, return widgetId | | `error-callback` | `()=>void` | | The name of your callback function, executed when reCAPTCHA encounters an error (usually network connectivity) and cannot continue until connectivity is restored. If you specify a function here, you are responsible for informing the user that they should retry. | | `expired-callback` | `()=>void` | | The name of your callback function, executed when the reCAPTCHA response expires and the user needs to re-verify. | | `load-callback` | `(response:unknown)=>void` | | The name of your callback function, executed when the user submits a successful response. The g-recaptcha-response token is passed to your callback. |