@hcaptcha/react-native-hcaptcha
Version:
hCaptcha Library for React Native (both Android and iOS)
76 lines (69 loc) • 2.09 kB
JavaScript
import React, { useState, useRef } from 'react';
import { Text, View, StyleSheet, TouchableOpacity } from 'react-native';
import ConfirmHcaptcha from '@hcaptcha/react-native-hcaptcha';
// demo sitekey
const siteKey = '00000000-0000-0000-0000-000000000000';
const baseUrl = 'https://hcaptcha.com';
const App = () => {
const [code, setCode] = useState(null);
const captchaForm = useRef(null);
const onMessage = event => {
if (event && event.nativeEvent.data) {
if (event.nativeEvent.data === 'open') {
console.log('Visual challenge opened');
} else if (event.success) {
setCode(event.nativeEvent.data);
captchaForm.current.hide();
event.markUsed();
console.log('Verified code from hCaptcha', event.nativeEvent.data);
} else if (event.nativeEvent.data === 'challenge-expired') {
event.reset();
console.log('Visual challenge expired, reset...', event.nativeEvent.data);
} else /* other errors */ {
setCode(event.nativeEvent.data);
captchaForm.current.hide();
console.log('Verification failed', event.nativeEvent.data);
}
}
};
return (
<View style={styles.container}>
<ConfirmHcaptcha
ref={captchaForm}
siteKey={siteKey}
baseUrl={baseUrl}
languageCode="en"
onMessage={onMessage}
/>
<TouchableOpacity
onPress={() => {
captchaForm.current.show();
}}>
<Text style={styles.paragraph}>Click to launch</Text>
</TouchableOpacity>
{code && (
<Text style={{ alignSelf: 'center' }}>
{`passcode or status: `}
<Text style={{ color: 'darkviolet', fontWeight: 'bold', fontSize: 6 }}>
{code}
</Text>
</Text>
)}
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
backgroundColor: '#ecf0f1',
padding: 8,
},
paragraph: {
margin: 24,
fontSize: 18,
fontWeight: 'bold',
textAlign: 'center',
},
});
export default App;