react-native-recaptcha icon indicating copy to clipboard operation
react-native-recaptcha copied to clipboard

Invisible captcha not rendered properly on iOS

Open gusoskar opened this issue 5 years ago • 10 comments

The captcha is not being rendered properly. It's super small, even though the container is 100% width and 80px high.

<View style={{ width: '100%', height: 80, borderWidth: 1}}>
 <ReCaptcha
    onReady={() => console.log("Captcha is ready")}
    siteKey={site_key}
    url={url}
    action={'verify'}
    reCaptchaType={1} //invisible
    containerStyle={{ height: '100%', width: '100%', marginButton: 0 }}
    onExecute={this.captureResponseToken.bind(this)}
   />
</View>

Screenshot 2019-07-08 at 10 20 49

gusoskar avatar Jul 08 '19 08:07 gusoskar

I'm guessing if you want it to be visible you need the reCaptchaType to be reCaptchaType={2}

They types are export const type = Object.freeze({"invisible": 1, "normal": 2});

Jedidiah avatar Jul 08 '19 14:07 Jedidiah

Technically I don't want it to be visible, but this is what I get when I render it with the type reCaptchaType=1. On android it seems to be working normally. The invisible captcha is supposed to actually be completely invisible, with no rendering on screen at all?

I'm new to reCaptcha so I might have mistaken somehow.

gusoskar avatar Jul 08 '19 14:07 gusoskar

Ah got you, what if you remove the containerStyle that's setting the width and height?

Jedidiah avatar Jul 08 '19 16:07 Jedidiah

The default values for the containerStyle are height: 100% and width:100%, so the values I've assigned do not actually have an impact to the way it's rendered here. On android it seems to be rendering just normally, as in the captcha actually being 80px hight with wider width.

I'd think it's some kind of a bug with iOS webview

gusoskar avatar Jul 08 '19 16:07 gusoskar

The invisible captcha is supposed to actually be completely invisible, with no rendering on screen at all?

I'm new to it too, but that's my understanding with V3, it just works in the background and gives you a score for the user.

Jedidiah avatar Jul 10 '19 09:07 Jedidiah

how do we execute the recaptcha like on button click or something ??

kingeke avatar Aug 27 '19 02:08 kingeke

@acsant please assist

kingeke avatar Aug 27 '19 02:08 kingeke

@kingeke

how do we execute the recaptcha like on button click or something ??

You can achieve that the following way:

The below example code is not tested but the idea is the following

When the button is clicked the captcha is loaded and once the token is received the actual process that requires the captcha is started.

class Example extends Component {
  constructor(props) {
    super(props)
    this.state = {
      loadCaptcha: false
    }
  }

 handlePress = () => {
   this.setState({ loadCaptcha: true })
 }

handleReCaptchaExecute = (captcha) => {
  this.setState({ loadCaptcha: false });

  // Do whatever you want to do with the captcha
}

 render() {
   const { loadCaptcha } = this.state;
    const captchaComponent = (
      <View style={{ width: '100%', height: 0 }}>
        <ReCaptcha
          siteKey="SITEKEYHERE"
          url="URLHERE"
          action="verify"
          reCaptchaType={1} // invisible
          onExecute={this.handleReCaptchaExecute}
        />
      </View>
    );

    return (
      {loadCaptcha && captchaComponent}
      <Button
        title="Press me"
        color="#f194ff"
        onPress={this.handlePress}
      />
    )
  }

}

export default Example;

lbudakov avatar Dec 24 '19 20:12 lbudakov

@gusoskar @lbudakov @kingeke @Jedidiah Is anyone able to get the token?

BajajSaajan avatar Mar 24 '22 09:03 BajajSaajan

Use this library

https://www.npmjs.com/package/react-native-secure-captcha-v3

amitmehtacode avatar May 09 '24 19:05 amitmehtacode