IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[reCAPTCHA] « tokenCaptcha » non transmis


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut [reCAPTCHA] « tokenCaptcha » non transmis
    Bonjour tout le monde,

    Tout d'abort sacher que mon nivaux en Js n'es pas tres bon 😅

    Je vous explique mon probleme :

    J'ai un formulaire simple de connexion avec le system recaptcha3 de google.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form method="POST" action="/login" class="sub-container-div">
    <input name="email" type="email" class="input-white-1" placeholder="Adresse e-mail professionnelle" />
    <input name="password" type="password" class="input-white-1 password-input" placeholder="Mot de passe" />
    <input type="hidden" id="captcha" name="tokenCaptcha" />
    <button type="submit" class="colored-button-1" id="connect-button">SE CONNECTER</button>
    </form><br><br>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var connectButton = document.getElementById('connect-button');
    grecaptcha.ready(function () {
        connectButton.addEventListener('click', function (e) {
            grecaptcha.execute(captcha_public_key, {action: 'homepage'}).then(function (token) {
                document.getElementById('captcha').value = token;
                setTimeout(function () {
                    connectButton.disabled = "on";
                    connectButton.classList.add('disabled');
                    var loadingDivs = document.getElementsByClassName('loading-div');
     
                    for (var i = 0; i < loadingDivs.length; i++) {
                        loadingDivs[i].style.display = "flex";
                    }
                });
            });
        });
    });
    Seulement l'input "tokenCaptcha" n'est pas envoyé, je pensse que c'est parce que l'evenment click est trop rapide. C'est possible ? Sinon d'où cela peut venir ? La méthode que j'utilise n'est pas t'elle par la bonne ?

  2. #2
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Pour ce genre d'algo, il me semble que l'utilisation d'une promesse est incontournable...

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut
    Merci,
    Pas d'autre solution ? Je t'avoue que je suis encore moins a l'aise avec asynchrone en JS...

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    Citation Envoyé par psychadelic
    ... il me semble que l'utilisation d'une promesse est incontournable...
    grecaptcha.execute est une Promise


    Citation Envoyé par Dinatrium
    ...c'est parce que l'evenment click est trop rapide.
    Qu'est ce qu'un click trop rapide , plus sérieusement ,ta page est soumise avant le retour de la réponse de grecaptcha.execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    connectButton.addEventListener('click', function (e) {
      e.preventDefault();
      //
    et au retour de la réponse positive tu soumets ton formulaire.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut
    J'aurais bien aimer voir ton message avant 😵
    Mais finalement j'en suis venu a la même conclusion 😁

    J'ai ajouter un id au form :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <form id="formSubmit" method="POST" action="/login" class="sub-container-div">
     
    <input name="email" type="email" class="input-white-1" placeholder="Adresse e-mail professionnelle" />
     
    <input name="password" type="password" class="input-white-1 password-input" placeholder="Mot de passe" />
     
    <input type="hidden" id="captcha" name="tokenCaptcha" />
     
    <button type="submit" class="colored-button-1" id="connect-button">SE CONNECTER</button>
     
    </form>

    Pour le Js j'ai save l'action dans une variable form, ensuite je la stop.
    Une fois que le chargement du token est terminer je renvoie l'action avec ma variable form.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /*
    ReCaptcha3
     */
    $('#formSubmit').submit(function (e) {
        var form = this;
        e.preventDefault();
        var connectButton = document.getElementById('connect-button');
        grecaptcha.ready(function () {
            grecaptcha.execute(captcha_public_key, {action: 'homepage'}).then(function (token) {
                document.getElementById('captcha').value = token;
                form.submit();
                setTimeout(function () {
                    connectButton.disabled = "on";
                    connectButton.classList.add('disabled');
                    var loadingDivs = document.getElementsByClassName('loading-div');
     
                    for (var i = 0; i < loadingDivs.length; i++) {
                        loadingDivs[i].style.display = "flex";
                    }
                });
            });
        });
    });
    Merci beaucoup en tout qu'a

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] [Symfony 2] Paramètres POST non transmis via Ajax
    Par Intronaut dans le forum Symfony
    Réponses: 8
    Dernier message: 22/05/2014, 09h39
  2. [AJAX] Formulaire non transmis avec ajax
    Par gastoncs dans le forum jQuery
    Réponses: 1
    Dernier message: 15/06/2013, 13h09
  3. $_POST non transmis
    Par devlm dans le forum Langage
    Réponses: 10
    Dernier message: 12/07/2012, 11h38
  4. $_POST non transmis
    Par boteha dans le forum Internet
    Réponses: 2
    Dernier message: 18/09/2010, 11h23
  5. Réponses: 14
    Dernier message: 17/08/2009, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo