我已经搜索了2个小时,我不知道我在做什么错。希望有人可以帮助我:
基本上,这很容易。我有一个用于Recaptchas的可重用组件。有问题的元素是弹出对话框中“忘记密码”的文本字段(通过登录掩码)
处理各种验证码的基本思想(因为同一页面上有两个):
null
0
的突变>if === 0
,开始评估验证码onValidated
,调用将结果保存到vuex的突变。然后另一个if(newVal)
的观察者将整个事件提交。按照我的理论,这没有问题。我记得它已经在过去的某个时候起作用了(或者我只是没有注意到重复提交),但是现在我做了一些更改,它的行为确实很奇怪。
准确地说:我单击一次按钮,一切正常,但一个观察者触发两次,即使根本不应该。一次触发前的所有操作,只有观察者触发两次,即使我这样做也是如此
if (!this.running) { this.running = true console.log('forgot watcher 2') this.$refs.recaptcha.execute() }
但是它也不起作用。似乎完全在同一时间运行它们,对我来说这没有意义
控制台输出是这个:
submit verify forgot captcha 0 forgot watcher 2 0 forgot watcher 2 verified forgot captcha verified 03AOLTBLTP............... forgot watcher verified forgot watcher
因此很容易遵循:
verifyCaptcha()
存储到vuex我的文件如下:
<template>
<v-form
@submit.prevent="twoFaRequired ? sendTwoFa() : verifyLoginCaptcha()"
>
// ...
<recaptcha />
// ...
<v-layout>
<form>
// ...
<recaptcha />
<v-btn
color="primary"
:loading="forgotLoading"
:disabled="successful || forgotLoading || $v.$invalid"
@click.native.stop.prevent="verifyForgotCaptcha"
>Reset Password</v-btn>
//...
methods: {
verifyForgotCaptcha() {
console.log('submit')
this.$store.commit('user/VERIFY_FORGOT_CAPTCHA')
},
//...
watch: {
forgotCaptcha(newVal, oldVal) {
if (newVal) {
console.log('forgot watcher')
this.sendForgotEmail()
}
},
//...
forgotCaptcha() {
return this.$store.state.user.forgotCaptcha
},
//...
VERIFY_FORGOT_CAPTCHA(state) {
console.log('verify forgot captcha')
state.forgotCaptcha = 0
},
FORGOT_CAPTCHA_VERIFIED(state, payload) {
console.log('forgot captcha verified', payload)
state.forgotCaptcha = payload
},
//...
<template>
<div class="d-flex justify-center">
<vue-recaptcha
ref="recaptcha"
:sitekey=siteKey
:loadRecaptchaScript="true"
size="invisible"
@verify="verifyCaptcha">
</vue-recaptcha>
</div>
</template>
<script>
import VueRecaptcha from 'vue-recaptcha'
import { mapGetters } from 'vuex'
export default {
data: () => ({
running: false,
usage: '',
siteKey: 'xxxxxxx'
}),
components: { VueRecaptcha },
computed: {
...mapGetters([
'user'
]),
//...
isForgotCaptcha() {
return this.$store.getters['user/forgotCaptcha']
}
},
methods: {
verifyCaptcha(response) {
console.log('verified')
//...
if (this.usage === 'forgot') this.$store.commit('user/FORGOT_CAPTCHA_VERIFIED', response)
this.usage = ''
this.$refs.recaptcha.reset()
}
},
watch: {
//...
isForgotCaptcha(newVal) {
if (newVal === 0) {
console.log('forgot watcher 2')
this.usage = 'forgot'
this.$refs.recaptcha.execute()
}
},
}
};
</script>
如果您需要更多信息/代码,请随时询问。我希望任何人都可以告诉我我在做什么错。我要在这里生气。谢谢!
我现在已经搜索了2个小时,我不知道我在做什么错。.希望有人可以帮助我:基本上这很容易。我有一个用于Recaptchas的可重用组件。有问题的元素...
在login.vue
中,有两个<recaptcha>
实例。它们中的每一个都有其自己的观察者集,但不会共享。同样,它们每个都有自己的计算属性isForgotCaptcha
。