2014-01-30 4 views
6

Я внедряю recaptcha в Angular JS, я использую ссылку «https://github.com/VividCortex/angular-recaptcha» в качестве ссылки. Я упомянул раздел «Использование» и выполнил инструкции кода, но все еще не смог получить recaptcha на странице регистрации.Recaptcha in Angular JS

Шаги, следующие за мной - 1. Сгенерирован открытый ключ. 2. Добавлена ​​ 3. Добавлена ​​ДИВ для рекапчи

  1. Добавлены фиброзного кольца-recaptcha.js в страницу - downloded форма GitHub код выше ссылке.

Может кто-нибудь, пожалуйста, дайте мне знать, что мне не хватает в нем? Может ли кто-нибудь дать мне пример демонстрационного примера для recaptcha?

Заранее спасибо.

+0

Какая у вас конкретная проблема? –

ответ

1

К сожалению, если вы уже проверили это ...

Они имеют демо-файл here.

Они также упоминают ... «Имейте в виду, что captcha работает только при использовании с реальным доменом и с действительным ключом re-captcha, поэтому этот файл не будет работать, если вы просто загрузите его в свой браузер».

Я следовал их инструкциям, и это сработало для меня.

+0

Спасибо Panda Xpress, я могу запустить recaptcha, я обнаружил, что какой-то путь был нарушен для js-файла в демонстрации recaptcha. –

+0

Спасибо, не могли бы вы подробно остановиться здесь, чтобы он помогал другим? –

+0

Также, пожалуйста, примите ответы, которые помогут вам помочь другим. Спасибо. –

3

пример, который woked для меня
register.cshtml:

<div vc-recaptcha key="'domain-key'" on-success="setResponse(response)"></div> 

app.js:

var app = angular.module('myApp', ['ngRoute','vcRecaptcha']); 

controller.js:

var ctrl = function ($rootScope, $scope, $location, $routeParams, registrationService) { 

     $scope.reCaptchaResponse = ""; 
     $scope.setResponse = function (response) { 
      $scope.reCaptchaResponse = response; 
     }; 
     $scope.register = function() { 
      var registration = { 
           ... 
       reCaptchaResponse: $scope.reCaptchaResponse 
      } 
      $http.post(serviceBase + 'Register', registration).then(function (results) {     
       //return result 
      }); 
     } 
    } 

Controller.cs:

[HttpPost] 
    public JsonResult Register(UserDTO registration) 
    { 
     string responseFromServer = ""; 
     WebRequest request = WebRequest.Create("https://www.google.com/recaptcha/api/siteverify?secret=mysecret&response=" + registration.ReCaptchaResponse); 
     request.Method = "GET"; 
     using (WebResponse response = request.GetResponse()) 
     { 
      using (Stream stream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(stream); 
       responseFromServer = reader.ReadToEnd(); 
      } 
     } 

     if(responseFromServer != "") 
     { 
      bool isSuccess = false;   
      Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseFromServer); 
      foreach (var item in values) 
      { 
       if (item.Key == "success" && item.Value == "True") 
       { 
        isSuccess = true; 
        break; 
       }       
      } 

      if(isSuccess) 
      { 
       //do something 
      } 
      else 
      { 
       //return reCaptcha error 
      } 

     } 

     return Json(result); 
    } 
0

При работе с угловыми и google recaptcha библиотека, которую вы использовали, является лучшим вариантом. Но вам нужно позаботиться о следующих вещах для его работы.

  1. Включите библиотеку, как описано в вашем угловом проекте.
  2. Зарегистрируйте ваш сайт и получите ключи от сайта.
  3. Включите виджет, используйте свой ключ сайта.
  4. Получите требуемый ответ g-captcha после того, как пользователь решит капчу.
  5. Сделайте запрос ajax на ваш сервер с помощью G-captcha-reposnse.
  6. На вашем сервере проверьте g-captcha-response с помощью API проверки сайта google.

У этой ссылки есть хорошее объяснение с помощью рабочего примера. Google recaptcha with angularJS

2

Этап 1: Включите директиву captcha в форме.HTML

<body ng-app="angularRecaptcha"> 
    <div class="col-md-6 col-md-offset-3 signupform" ng-controller="recapCtrl as recap"> 
     <form name="recap.signupForm" ng-submit="recap.signup()"> 
     ..... 
     .. 
     <!--Recaptcha Widget---> 
     <div vc-recaptcha key="recap.publicKey"></div> 
     ... 
     ..... 
    </form> 
    </div> 
<body> 

Шаг2: Далее идет App.js

Угловой-Recaptcha библиотека дает нам vcRecaptchaService, что имеет метод GetResponse(), который дает нам строку г-каптч ответа после того, как пользователь успешно решил captcha.

angular.module(‘angularRecaptcha’,[‘vcRecaptcha’]) 
.controller('recapCtrl',['vcRecaptchaService','$http',function(vcRecaptchaService,$http){ 
    var vm = this; 
    vm.publicKey = "----YOUR------SITE--------KEY---"; 

    vm.signup = function(){ 

    /* vcRecaptchaService.getResponse() gives you the g-captcha-response */ 

     if(vcRecaptchaService.getResponse() === ""){ //if string is empty 
      alert("Please resolve the captcha and submit!") 
     }else { 
      var post_data = { //prepare payload for request 
       'name':vm.name, 
       'email':vm.email, 
       'password':vm.password, 
       'g-recaptcha-response':vcRecaptchaService.getResponse() //send g-captcah-response to our server 
      } 


/* MAKE AJAX REQUEST to our server with g-captcha-string */ 
       $http.post('http://sitename.com/api/signup',post_data).success(function(response){ 
       if(response.error === 0){ 
        alert("Successfully verified and signed up the user"); 
       }else{ 
        alert("User verification failed"); 
       } 
      }) 
      .error(function(error){ 

      }) 
     } 
    } 
}]) 

Шаг 3: Handle запроса POST на апи конечной точке с помощью SLIM PHP Рамочного

<?php 
$app->post('/signup',function() use($app){ 
$req = $app->request()->getBody(); //get request pramans 
$data = json_decode($req, true); //parse json string 

//Should be some validations before you proceed 
//Not in the scope of this answer. 

$captcha = $data['g-recaptcha-response']; //Captcha response send by client 

    //Build post data to make request with fetch_file_contents 
    $postdata = http_build_query(
     array(
     'secret' => '-----YOUR SECRET KEY-------', //secret KEy provided by google 
     'response' => $captcha,     // g-captcha-response string sent from client 
     'remoteip' => $_SERVER['REMOTE_ADDR'] 
    ) 
    ); 

    //Build options for the post request 
    $opts = array('http' => 
     array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $postdata 
    ) 
    ); 

    //Create a stream this is required to make post request with fetch_file_contents 
    $context = stream_context_create($opts); 

/* Send request to Googles siteVerify API */ 
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify",false,$context); 
$response = json_decode($response, true); 


if($response["success"]===false) { //if user verification failed 

    /* return error scenario to client */ 
    echo json_encode(array(
     "error" => 7, 
     "message" => "Robots Not allowed (Captcha verification failed)", 
     "captchaResult" => $response["success"], 
     "captcahErrCodes" => $response["error-codes"] //error codes sent buy google's siteVerify API 
    )); 
} else { 

     //Should be some Datatbase insertion to sign up the user 
     //before you return the success response 
     //Not in the scope of this answer. 

    /* return success scenario to client */ 
    echo json_encode(array(
    "error" => 0, 
    "message" => "Successfully signed up!", 
     "email" => $data['email'], 
     "captchaResult" => $response["success"] 
    )); 
} 

}); 
?> 
6

Хорошего демо-видео, чтобы включить Google ReCaptcha в приложении AngularJS приводится здесь AngularJS+ Google Recaptcha

It включает

  • Getti g общедоступные и закрытые ключи.
  • Используя открытый ключ в AngularJS
  • Использования секретного ключа в серверном коде (Spring используется в качестве сервера кода здесь)

Надеется, что это помогает демо.

+0

Поместите здесь подробнее. – Panther

+0

Спасибо Vijay, это было действительно полезно – Rameez