recaptcha:无法在javascript中组合方法

brqmpdu1  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(347)

我尝试将recaptcha v3集成到我的登录表单中,并应用了所有必要的配置组合和示例。这是我基于文档页面的实现。但是,我不能通过考试 g-recaptcha-response 对我的价值 Java 后端。我认为这个问题与合并有关 grecaptchasubmit 方法如下。
index.html:

<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>

login.vue:

<a-button class="primary g-recaptcha" <!-- added "g-recaptcha" to the class -->
          @click="onSubmit">
          Login
</a-button>
onSubmit() {
    grecaptcha.ready(function() {
      grecaptcha.execute('reCAPTCHA_site_key', {action: 'submit'})
                .then(function(token) {

        // I move my login block to here ---------------------------------
        this.$refs.formContainer.validate((valid) => { // --> throws error
        if (valid) {
            const params = { email: 'test@test.com', password: '******' };
            this.login(params).then((response) => {
              // pass "token" value to the backend
            });
          }
          return false;
        });
        // ---------------------------------------------------------------

      });
    });
  }
},

虽然我正确地获得了令牌值,但是 this.$refs.formContainer.validate((valid) 行抛出“未捕获(承诺中)typeerror:无法读取未定义的属性“$refs”错误。那么,我应该如何结合这些方法呢( grecaptcha.execute 和我的登录块)是否正确?

yyhrrdl8

yyhrrdl81#

贮藏 this 在变量中,并使用它调用函数

onSubmit() {
const that = this;
    grecaptcha.ready(function() {
      grecaptcha.execute('reCAPTCHA_site_key', {action: 'submit'})
                .then(function(token) {

        // I move my login block to here ---------------------------------
        that.$refs.formContainer.validate((valid) => { // --> throws error
        if (valid) {
            const params = { email: 'test@test.com', password: '******' };
            this.login(params).then((response) => {
              // pass "token" value to the backend
            });
          }
          return false;
        });
        // ---------------------------------------------------------------

      });
    });
  }
},

相关问题