3.2.5 • Published 7 months ago

react-recaptcha-net v3.2.5

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

react-recaptcha-net

React 组件,用于 Google reCAPTCHA v2

基于dozoisch/react-google-recaptcha

强制替换了验证服务地址为recatptcha.net用来规避GFW下使用react-google-recaptcha遇到的一些奇奇怪怪的问题,同时添加了TypeScript类型支持。

被一条龙服务过.jpg

安装

npm install --save react-recaptcha-net

使用

首先,你需要 注册一个 API 密钥对,获取客户端密钥后,便可以使用 <ReCAPTCHA />

默认使用方式会导入一个封装的组件,异步加载 Google reCAPTCHA 脚本,然后初始化一个 reCAPTCHA,用户可以与之交互。

示例:

import ReCAPTCHA from "react-google-recaptcha";

function onChange(value) {
  console.log("Captcha 值:", value);
}

ReactDOM.render(
  <ReCAPTCHA
    sitekey="你的客户端站点密钥"
    onChange={onChange}
  />,
  document.body
);

组件属性

用于自定义渲染的属性:

名称类型描述
asyncScriptOnLoadfunc可选 在 Google reCAPTCHA 脚本加载完成后的回调函数
badgeenum可选 bottomrightbottomleftinline,设置 reCAPTCHA 的徽标位置。仅适用于不可见的 reCAPTCHA
hlstring可选 设置 hl 参数,使 reCAPTCHA 支持多种语言。请参见 reCAPTCHA hl
isolatedbool可选 插件开发者用来避免与页面上已有的 reCAPTCHA 实例冲突。如果为 true,此 reCAPTCHA 实例将处于一个独立的 ID 空间。(默认值:false
onChangefunc用户成功完成验证码后调用的函数
onErroredfunc可选 在挑战过程中出错时的回调,通常是由于网络问题。
onExpiredfunc可选 在挑战过期后调用的回调,用户需要重新完成验证码。默认会调用 onChange,并传入 null 来表示过期回调。
sitekeystringAPI 客户端密钥
sizeenum可选 compactnormalinvisible,用来设置验证码的大小或使用不可见验证码
stokenstring可选 设置 stoken 参数,使 reCAPTCHA 支持从不同域名使用。参见 reCAPTCHA secure-token
tabindexnumber可选 元素的 tabindex (默认值:0
typeenum可选 imageaudio,设置初始验证码的类型 (默认值:image
themeenum可选 lightdark,设置小部件的主题 (默认值:light。参见 example

组件实例 API

该组件实例还提供了一些可以调用的实用函数,可以通过 ref 访问。

  • getValue():返回验证码字段的值
  • getWidgetId():返回 reCAPTCHA 小部件的 ID
  • reset():强制重置。参见 JavaScript API 文档
  • execute():程序化调用挑战
    • 在使用 "invisible" reCAPTCHA 时需要调用
  • executeAsync():程序化调用挑战,并返回一个 Promise,成功时返回令牌,出错时返回错误。
    • 可与 onChange() 属性结合使用的另一种方法

示例:

const recaptchaRef = React.createRef();
...
onSubmit = () => {
  const recaptchaValue = recaptchaRef.current.getValue();
  this.props.onSubmit(recaptchaValue);
}
render() {
  return (
    <form onSubmit={this.onSubmit} >
      <ReCAPTCHA
        ref={recaptchaRef}
        sitekey="你的客户端站点密钥"
        onChange={onChange}
      />
    </form>
  )
}

不可见 reCAPTCHA

参见 reCAPTCHA 文档 了解如何配置它。

使用不可见选项时,你需要以不同的方式处理。需要手动调用 execute 方法。

import ReCAPTCHA from "react-google-recaptcha";

const recaptchaRef = React.createRef();

ReactDOM.render(
  <form onSubmit={() => { recaptchaRef.current.execute(); }}>
    <ReCAPTCHA
      ref={recaptchaRef}
      size="invisible"
      sitekey="你的客户端站点密钥"
      onChange={onChange}
    />
  </form>,
  document.body
);

此外,你还可以使用 executeAsync 方法,以基于 Promise 的方式调用挑战。

import ReCAPTCHA from "react-google-recaptcha";

const ReCAPTCHAForm = (props) => {
  const recaptchaRef = React.useRef();

  const onSubmitWithReCAPTCHA = async () => {
    const token = await recaptchaRef.current.executeAsync();

    // 将令牌应用到表单数据
  }

  return (
    <form onSubmit={onSubmitWithReCAPTCHA}>
      <ReCAPTCHA
        ref={recaptchaRef}
        size="invisible"
        sitekey="你的客户端站点密钥"
      />
    </form>
  )
}

ReactDOM.render(
  <ReCAPTCHAForm />,
  document.body
);

高级用法

CSP Nonce 支持

window.recaptchaOptions = {
  nonce: document.querySelector('meta[name=\'csp-nonce\']').getAttribute('content'),
};

手动加载 Google reCAPTCHA 脚本

你也可以使用裸组件来手动加载脚本。使用该组件时,你需要自己管理 grecaptcha 依赖并手动加载脚本。

import { ReCAPTCHA } from "react-google-recaptcha";

const grecaptchaObject = window.grecaptcha; // 必须提供对 Google grecaptcha 对象的访问。

render(
  <ReCAPTCHA
    ref={(r) => this.recaptcha = r}
    sitekey="你的客户端站点密钥"
    grecaptcha={grecaptchaObject}
  />,
  document.body
);

隐藏 reCAPTCHA

根据 Google 文档,如果你在用户流程中明确显示 reCAPTCHA 品牌,允许隐藏徽标。

请添加以下文本:

此站点受 reCAPTCHA 保护,适用 Google
    <a href="https://policies.google.com/privacy">隐私政策</a> 和
    <a href="https://policies.google.com/terms">服务条款</a>。

如果你希望隐藏logo,可以在 CSS 中添加以下内容:

.grecaptcha-badge { visibility: hidden; }
3.2.5

7 months ago

3.2.4

7 months ago

3.2.3

7 months ago

3.2.2

7 months ago

3.2.1

7 months ago

3.2.0

7 months ago

3.1.0

7 months ago