Я использую AngularJS и пытаюсь работать с reCAPTCHA Google, я использую метод «Явно визуализировать виджет reCAPTCHA» для отображения reCAPTCHA на моей веб-странице,
HTML-код –
<script type="text/javascript">
var onloadCallback = function()
{
grecaptcha.render('loginCapcha', {
'sitekey' : 'someSiteKey',
'callback' : verifyCallback,
'theme':'dark'
});
};
var auth='';
var verifyCallback = function(response)
{
//storing the Google response in a Global js variable auth, to be used in the controller
auth = response;
var scope = angular.element(document.getElementById('loginCapcha')).scope();
scope.auth();
};
</script>
<div id="loginCapcha"></div>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
На данный момент я могу добиться необходимой функциональности, независимо от того, является ли пользователь человеком или ботом.
Согласно приведенному выше коду, у меня есть функция обратного вызова с именем 'verifyCallback' в моем код,
который сохраняет ответ, созданный Google, в глобальной переменной с именем 'auth'.
Теперь последняя часть reCAPCHA вызывает Google API,
с "https://www.google.com/recaptcha/api/siteverify" в качестве URL-адреса и методом POST,
передавая ему секретный ключ и >Ответ создан Google, что я и сделал в приведенном ниже коде.
Мой контроллер —
_myApp.controller('loginController',['$rootScope','$scope','$http',
function($rootScope,$scope,$http){
var verified = '';
$scope.auth = function()
{
//Secret key provided by Google
secret = "someSecretKey";
/*calling the Google API, passing it the Secretkey and Response,
to the specified URL, using POST method*/
var verificationReq = {
method: 'POST',
url: 'https://www.google.com/recaptcha/api/siteverify',
headers: {
'Access-Control-Allow-Origin':'*'
},
params:{
secret: secret,
response: auth
}
}
$http(verificationReq).then(function(response)
{
if(response.data.success==true)
{
console.log("Not a Bot");
verified = true;
}
else
{
console.log("Bot or some problem");
}
}, function() {
// do on response failure
});
}
Итак, проблема, с которой я на самом деле сталкиваюсь, заключается в том, что я не могу попасть по URL-адресу Google.
Ниже приведен снимок экрана с запросом, который я отправляю, и ошибкой.
Насколько я понимаю, это связано с запросом CORS и Preflight.
Итак, что я делаю неправильно? Как решить эту проблему?