refactor(pages, components): move recaptcha bits to separate component
This commit is contained in:
parent
af1b09f55c
commit
69cdaba253
33
components/recaptcha.vue
Normal file
33
components/recaptcha.vue
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { useChallengeV2, useRecaptchaProvider } from "vue-recaptcha";
|
||||||
|
useRecaptchaProvider();
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: "verify", response: string): void;
|
||||||
|
}>();
|
||||||
|
const m = defineModel<number>("ts");
|
||||||
|
const d = defineModel<boolean>("done");
|
||||||
|
|
||||||
|
const { root, execute, onVerify, widgetID, onExpired } = useChallengeV2({
|
||||||
|
options: {
|
||||||
|
size: "invisible",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
watch(
|
||||||
|
() => m.value,
|
||||||
|
() => {
|
||||||
|
execute();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
onVerify((resp) => {
|
||||||
|
console.debug("onverify called", resp);
|
||||||
|
emit("verify", resp);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div ref="root" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped></style>
|
@ -6,6 +6,7 @@
|
|||||||
import { useChallengeV2 } from "vue-recaptcha";
|
import { useChallengeV2 } from "vue-recaptcha";
|
||||||
import { notification } from "ant-design-vue";
|
import { notification } from "ant-design-vue";
|
||||||
import termsOfServices from "~/components/tos.vue";
|
import termsOfServices from "~/components/tos.vue";
|
||||||
|
import Recaptcha from "~/components/recaptcha.vue";
|
||||||
useRecaptchaProvider();
|
useRecaptchaProvider();
|
||||||
|
|
||||||
interface FormState {
|
interface FormState {
|
||||||
@ -38,31 +39,14 @@
|
|||||||
|
|
||||||
const dark = inject<boolean>("dark");
|
const dark = inject<boolean>("dark");
|
||||||
|
|
||||||
const { setValues, values, handleSubmit } = useForm({
|
const { setValues, values, handleSubmit, setFieldValue } = useForm({
|
||||||
validationSchema: vschema,
|
validationSchema: vschema,
|
||||||
keepValuesOnUnmount: true,
|
keepValuesOnUnmount: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
const {
|
|
||||||
value: recaptchaValue,
|
|
||||||
errorMessage: recaptchaError,
|
|
||||||
name: recapName,
|
|
||||||
setValue: srv,
|
|
||||||
} = useField<string>("recaptcha", undefined, { syncVModel: true });
|
|
||||||
|
|
||||||
const { root, execute, onVerify, widgetID } = useChallengeV2({
|
|
||||||
options: {
|
|
||||||
size: "invisible",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
onVerify((resp) => {
|
|
||||||
console.debug("onverify called", resp);
|
|
||||||
srv(resp);
|
|
||||||
});
|
|
||||||
const onFinish = handleSubmit(async (values: any, actions: any) => {
|
const onFinish = handleSubmit(async (values: any, actions: any) => {
|
||||||
// log.debug(values, widgetID);
|
// log.debug(values, widgetID);
|
||||||
// log.debug(widgetID);
|
// log.debug(widgetID);
|
||||||
execute();
|
|
||||||
const { signUp } = useAuth();
|
const { signUp } = useAuth();
|
||||||
let reso;
|
let reso;
|
||||||
try {
|
try {
|
||||||
@ -75,22 +59,8 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// log.debug(reso);
|
|
||||||
|
|
||||||
/* try {
|
|
||||||
{data: reso } = await useApiFetch("/auth/register", {
|
|
||||||
method: "post",
|
|
||||||
body: values
|
|
||||||
})
|
|
||||||
} catch (e: any) {
|
|
||||||
// log.debug(reso.error.data)
|
|
||||||
if (e.data) {
|
|
||||||
notification[ "error" ]({
|
|
||||||
message: h("div", { innerHTML: reso.error.data.message })
|
|
||||||
})
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
});
|
});
|
||||||
|
const ts = ref(Date.now());
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -120,7 +90,7 @@ notification[ "error" ]({
|
|||||||
@update:checked="
|
@update:checked="
|
||||||
(n) => {
|
(n) => {
|
||||||
setValues({ agree: n });
|
setValues({ agree: n });
|
||||||
if (!recaptchaValue) execute();
|
ts = Date.now();
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
@ -130,7 +100,7 @@ notification[ "error" ]({
|
|||||||
</vee-field>
|
</vee-field>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div ref="root" />
|
<recaptcha v-model:ts="ts" @verify="(res) => setFieldValue('recaptcha', res)" />
|
||||||
<a-row :align="'middle'" justify="center">
|
<a-row :align="'middle'" justify="center">
|
||||||
<a-col>
|
<a-col>
|
||||||
<a-button size="large" type="primary" html-type="submit">Sign me up!</a-button>
|
<a-button size="large" type="primary" html-type="submit">Sign me up!</a-button>
|
||||||
|
Loading…
Reference in New Issue
Block a user