Firebase RecaptchaVerifier.clear() 无效

2023-12-11

我有一个 React Web 应用程序,我想在其中实现电话身份验证。我已经根据文档和示例初始化了 recaptchaVerifier。但是,如果我想再次提交表单(比如因为错误)。我收到错误:Error: reCAPTCHA has already been rendered in this element.

我尝试使用删除验证程序.clear方法,但是好像没有效果。下面是示例代码。

有什么是我忽略的吗?

谢谢。

class PhoneAuth extends React.Component {
  static contextTypes = {
    firebase: PropTypes.object.isRequired,
  };

  state = {
    phone: '',
  }

  onChangeHandler = (e) => {
    this.setState({
      [e.target.name]: e.target.value,
    })
  }

  onPhoneLoginSubmit = (e) => {
    const { onVerificationSend } = this.props
    const {phone} = this.state
    const {firebase }=this.context

    e.preventDefault()

    this.applicationVerifier = new firebase.auth.RecaptchaVerifier(
      'recaptcha-container',
      { size: 'invisible' }
    );

    firebase.auth().signInWithPhoneNumber(phone, this.applicationVerifier)
      .then((result) => {
        onVerificationSend(result.verificationId)
        this.applicationVerifier.clear()
      })
      .catch (error => {
        this.setState({formError: error})
        this.applicationVerifier.clear()
      })
  }

  render() {
    const { intl } = this.props;
    const { phone, formError } = this.state

    return (
      <div>
      <form onSubmit={this.onPhoneLoginSubmit} name="phone-signin" method="post">
              <input
                id="phone"
                name="phone"
                type="phone"
                onChange={this.onChangeHandler}
                value={phone}
              />
              <label className="input__label" htmlFor="email">
               phone number
              </label>

            {formError && (
              <p >
                {formError.code}
              </p>
            )}

            <button
              type="submit"
            >
              sign in
            </button>
          </form>
          <div id="recaptcha-container"></div>
      </div>
    )
  }
}

所以,我已经弄清楚了。问题不是clear() 方法 - 该方法工作正常。但我必须自己从头开始重新创建验证码容器。医生对此不太清楚,所以这让我很困惑。在文档中有:

从页面中清除 reCAPTCHA 小部件并销毁当前实例。

所以我想通过该方法将其删除。

所以,现在我在渲染方法中有这样的代码:

<div ref={ref => this.recaptchaWrapperRef = ref}>
  <div id="recaptcha-container"></div>
</div>

然后在提交回调中:

if (this.applicationVerifier && this.recaptchaWrapperRef) {
  this.applicationVerifier.clear()
  this.recaptchaWrapperRef.innerHTML = `<div id="recaptcha-container"></div>`
}

// Initialize new reCaptcha verifier
this.applicationVerifier = new firebase.auth.RecaptchaVerifier(
  'recaptcha-container',
  { size: 'invisible' }
);

这是我在反应中设法做到这一点的唯一方法。如果有人还有更好的方法,请随时发布。我认为这非常丑陋(对于 React)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase RecaptchaVerifier.clear() 无效 的相关文章

随机推荐

  • 用于处理应用程序内弹出窗口的 Web 浏览器

    我正在尝试使用 WebBrowser 控件启动弹出窗口的新表单 而不是在 IE 中打开它 我尝试使用 AxWebBrowser 来获取与 NewWindow3 事件一起使用的弹出窗口 并且只是做e ppDisp AxWebBrowser A
  • 将 pandas 数据框字符串条目拆分(分解)为单独的行

    我有一个pandas dataframe其中一列文本字符串包含逗号分隔的值 我想拆分每个 CSV 字段并为每个条目创建一个新行 假设 CSV 是干净的并且只需要按 进行拆分 例如 a应该成为b In 7 a Out 7 var1 var2
  • Intellij Scala 工作表运行类型差异解释

    在 Intellij Scala 工作表支持中 运行类型 即 PLAIN 与 REPL 之间有什么区别 Plain评估模型在评估表达式之前一次性编译整个工作表 同时REPL评估模型在移动到下一个之前评估每个表达式 添加一个表达式REPL模式
  • JS Ajax调用PHP并获取ajax调用数据

    我有一个标准的 javascript ajax 调用 我将 data 设置为 json 数据 ajax type POST url BaseUrl User Login url BaseUrl User Limit 1 2 data api
  • 数组上“大于”(以及另一个不等式比较运算符)的行为

    我找不到任何描述或任何提及如何 gt lt lt and gt 在 JavaScript 中比较两个数组时运算符的行为 我能想到的唯一一件微不足道的事情是 两个数组通过每个相对索引的两个元素进行比较 但在测试之后 我没有得到我预期的结果 那
  • 将“分组”和“堆叠”组合在条形图中?

    我知道如何画一个groupedBAR 图和stackedBAR图如下 Y round rand 5 4 10 figure subplot 2 2 1 bar Y grouped title Group similar for hist h
  • 收到 ERR_INVALID_HTTP_RESPONSE 错误 laravel5 本地主机

    当我启动我的程序时我陷入困境拉拉维尔 5本地主机上的项目谷歌浏览器 我正在使用此存储库中的引导管理面板 https github com start laravel sb admin laravel 5 我安装了所有的需求 比如npm bo
  • sendTextMessage(电话号码, null, 消息, null, null);即使消息未发送,也始终返回成功

    我尝试使用短信活动这个链接但问题是它总是给出 消息已发送 如何知道消息是否真的发送了 这是代码 try SmsManager smsManager SmsManager getDefault smsManager sendTextMessa
  • IIS Express 过度缓存经典 ASP 页面

    我遇到了这个随机出现的问题 当我对 ASP 页面进行更改时 IIS Express 无法识别 它提供页面的先前版本 我可以通过重新编辑页面 进行一些小的更改 然后撤消更改并重新保存文件来解决此问题 但这很烦人 到目前为止 我只在经典 ASP
  • 在oracle SQL中计算没有日历表的工作日(包括日期之间的假期)

    好的 所以我已经阅读了大量关于在 sql 中模拟 excel 的网络日函数的可能性的文章 并得出结论 到目前为止最简单的解决方案是有一个日历表 该表将标记工作日或非工作日工作日 然而 由于我无法控制的情况 我们无法享受到如此奢侈的享受 而且
  • 如何使用 JavaScript 检测地址栏更改?

    我有一个 Ajax 密集型应用程序 可能有一个 URL 例如 http example com myApp page 1 当用户操作该网站时 地址栏可能会更改为类似的内容 http example com myApp page 5 无需重新
  • 从 floatbuffer 转换为 byte[]

    我正在尝试找到一种在java中使用jack audio的方法 我已经成功创建基于 jnajack 的包装器 以将音频从 jacks 的端口获取到 java 应用程序 原始 jnajack 不适用于 jack 1 9 8 但我找不到操作数据的
  • IE10 中等高列内的元素内容不是 100%

    对于我正在开发的应用程序 我需要等高的列 我选择使用 CSS 将我的列项目设置为表格的样式 这样每根柱子的高度确实是柱子高度中最大的 请参阅此处的示例 http jsfiddle net roelvd GXe9m 现在每个浏览器中每列的高度
  • 浮点处理器非确定性?

    在不涉及不必要的细节的情况下 基于相同的输入 浮点数 x86 64 上的运算是否有可能返回其结果的微小变化 哪怕有一点点不同 我正在模拟一个基本混沌的系统 我希望数据的微小变化会产生明显的影响 然而我预计 使用相同的数据 程序的行为将被修复
  • 在Python子进程中,使用Popen()和check_output()有什么区别?

    以shell命令 cat file txt 为例 使用 Popen 可以运行 import subprocess task subprocess Popen cat file txt shell True stdout subprocess
  • 访问闭包捕获的变量

    我想知道是否有任何方法可以从函数外部访问函数中闭包捕获的变量 例如如果我有 A function b var c function some code using b foo function do things with c 有什么办法可
  • 如何在函数出口上运行清理代码?

    C 类提供 RAII 习惯用法 因此你不必关心异常 void function The memory will be freed automatically on function exit std vector
  • 如何在 iOS 7 中向全屏 VC 添加自定义导航栏并使其与状态栏相匹配?

    在我正在开发的应用程序 Xcode 5 gt iOS 7 自动布局 中 我推送了一个模式视图控制器 我希望模态视图控制器有一个导航栏 所以我添加了一个 并添加了一个约束 将其顶部与顶部布局指南对齐 因此它放置在状态栏的正下方 我使用自己的导
  • 读取共享库中的文件 Xamarin C#

    我在共享库中保存了一些 json 文件 我已经成功地通过代码在 iOS 中很好地阅读了 string fileName Files file name json var path Path Combine NSBundle MainBund
  • Firebase RecaptchaVerifier.clear() 无效

    我有一个 React Web 应用程序 我想在其中实现电话身份验证 我已经根据文档和示例初始化了 recaptchaVerifier 但是 如果我想再次提交表单 比如因为错误 我收到错误 Error reCAPTCHA has alread