2017-05-13 63 views
8

sytuacja:Jak zweryfikować recaptcha w wywołaniu serwera?

Kiedyś sprawdź mój reCAPTCHA o prostej formie przedstawienia z POST na "/ login".

muszę zmienić moje wykonanie ze względów bezpieczeństwa i chciałbym zrobić coś takiego:

1) Forma Jquery przedstawienia.

2) Wykonaj połączenie z serwerem, aby zadzwonić, sprawdź recaptcha na serwerze.

3) Otrzymuj odpowiedź bez ponownego ładowania strony.

4) Zaakceptuj żądanie logowania lub nie na podstawie odpowiedzi.


PYTANIE:

Wygląda na to mogę zrobić żądania AJAX? Ale nie wiem jak. KOD


KLIENT:

<div class ="containerMargins"> 
     <h1 class = "authTitle">Login</h1> 
     <form id="loginForm"> 
      <div class="form-group"> 
      <label>Email</label> 
      <input type="email" class="form-control" name="email" id="loginEmail" placeholder="You can't forget it :)" required> 
      </div> 
      <div class="form-group"> 
      <label>Password</label> 
      <input type="password" class="form-control" name="password" id="loginPassword" placeholder="We hope you didn't forget it ^^" required minlength="12"> 
      </div> 
      <div class="g-recaptcha" data-sitekey="6LcRrxMUAAAAANx-AXSdRLAo4Pyqfqg-1vuPSJ5c"></div> 
      <button class="btn btn-default" id="loginButton">Submit</button> <span class="userLinks"> 
      <a class="logLinks" href="https://stackoverflow.com/users/register">Register</a><a href="https://stackoverflow.com/users/password">Password?</a></span> 
     </form> 
    </div> 

</div> 

<% include ../partials/indexScripts %> 

<script> 

$("#loginForm").submit(function(e) { 

    e.preventDefault(); 
    var email = $("#loginEmail").val(); 
    var password = $("#loginPassword").val(); 

    // WOULD LIKE TO MAKE SERVER CALL HERE TO CHECK RECAPTCHA BUT I DONT KNOW HOW 

    $this = $(this); 
    $.ajax({ 
     type: "POST", 
     url: "users/register", 
     data: $this.serialize() 
    }).done(function(data) { 

    if (successfulRecaptcha) { 
      firebase.auth().signInWithEmailAndPassword(email, password).then(authData => { 
    } 
    else { 
     console.log("You are a robot!"); 
    } 

serwer kodu

router.post('/login', function(req, res, next) { 
    verifyRecaptcha(req.body["g-recaptcha-response"], function(success) { 
     if (success) { 

     } else { 

     } 
    }); 
}); 
+0

To NodeJS na serwerze? nie podałeś tak – DannyZB

+0

@DannyZB tak. To jest. – Coder1000

Odpowiedz

5

mogę znaleźć rozwiązanie:

FRONT END:

$this = $(this); 
    $.ajax({ 
     type: "POST", 
     url: "login", 
     data: $this.serialize() 
    }).done(function(data) { 

     if (data == true) { 

backend:

router.post('/login', function(req, res, next) { 
    verifyRecaptcha(req.body["g-recaptcha-response"], function(success) { 
     if (success) { 
      res.send(true); 
     } else { 
      res.send(false); 
     } 
    }); 
});