我正在为一个React原生应用程序的登录屏幕实现一个reCaptcha验证器,该应用程序必须在网络和移动的环境中工作。
由于我是一个相当新的程序员,对react-native几乎没有经验,我意识到我可能错过了一些非常基本/明显的东西,这就是为什么我决定问这个问题,尽管这个问题以前已经被问过几次了。
我正在尝试this库,因为它是NPMjs上最流行的库。
在登录屏幕页面上,我调用组件<RecaptchaComponent/>
,这是我目前在该组件中拥有的代码。
import React, { useRef } from 'react';
import { View, Button } from 'react-native';
import Recaptcha, { RecaptchaHandles } from "react-native-recaptcha-that-works";
export const Recaptcha_Component = () => {
let url = "mySiteUrl";
let key = "publicKey";
const recaptcha: any = useRef<RecaptchaHandles>();
const send = () => {
console.log('send!');
recaptcha.current?.open();
};
const onVerify = (token: string) => {
console.log('success!', token);
};
const onExpire = () => {
console.warn('expired!');
}
return (
<View>
<Recaptcha
ref={recaptcha}
siteKey={key}
baseUrl={url}
onVerify={onVerify}
onExpire={onExpire}
size={"invisible"}
/>
<Button title="Send" onPress={send} />
</View >
)
}
当我按下应用程序中的发送按钮时,我看到一个小的加载指示器,但之后什么也没有发生。在控制台上,我看到this警告消息。
2条答案
按热度按时间4xrmg8kj1#
首先在https://www.google.com/recaptcha/admin/create处创建重新捕获密钥
然后创建一个新组件,如下所示:
您可以从其他组件使用此组件,例如:
p5cysglq2#
我不知道它是否仍然相关,但为了使用该ref,需要将其初始化为null:
const recaptcha: any = useRef<RecaptchaHandles>(null);
另外,去掉“any”--你已经把它声明为RecaptchaHandles的一个示例了。最后,如果你在开发模式下,使用google开发站点密钥和url。在生产环境中,使用你自己的密钥和url
Google开发站点密钥:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI谷歌基地网址:https://www.google.com/recaptcha/api