У меня проблемы с запросами на повторную проверку. Я использую службу v c Recaptcha для Angular JS с проверкой PHP. Я получаю ошибку 'missing-input-reponse' от объекта reCaptcha при отправке формы.
Сайт построен с AngularJS и PHP, я использование фабрики данных для отправки запросов на сервер с использованием объекта $ http. Я реализую функцию сброса пароля, и я хочу использовать reCaptcha в форме сброса. Вот тут у меня проблемы.
Бэкэнд все работает нормально, определенно, похоже, проблема с запросом капчи. Мои коды API reCaptcha работают в других местах на сайте, но без реализации AngularJS.
Мой контроллер выглядит следующим образом:
MySite.controller('passwordResetController', function($rootScope, $scope, $window, $location, $routeParams, Data, vcRecaptchaService) {
$rootScope.showControls = false;
$scope.response = null;
$scope.widgetId = null;
$scope.form = {email: '', id: '', response: ''};
$scope.model = {
key: // MY SITE KEY //
};
$scope.setResponse = function (response) {
console.info('Response available');
$scope.response = response;
};
$scope.setWidgetId = function (widgetId) {
console.info('Created widget ID: %s', widgetId);
$scope.widgetId = widgetId;
};
$scope.cbExpiration = function() {
console.info('Captcha expired. Resetting response object');
vcRecaptchaService.reload($scope.widgetId);
$scope.response = null;
};
$scope.sendReset = function(form) {
var valid;
$scope.form.response = $scope.response;
console.log($scope.form.response);
Data.post('/sendreset', {form:form})
.then(function(results) {
console.log(results);
if (results.status === 'success') {
valid = true;
} else {
valid = false;
}
Data.toast(results);
});
console.log('sending the captcha response to the server', $scope.response);
if (valid) {
console.log('Success');
Data.post('/createRequest', {
form: form
}).then(function(results) {
if (results.status === 'success') {
$scope.sendMail(form);
}
});
} else {
console.log('Failed validation');
vcRecaptchaService.reload($scope.widgetId);
}
}
$scope.sendMail = function(form) {
Data.post('/sendPasswordReset', {
form: form
}).then(function(results) {
Data.toast(results);
if (results.status === 'success') {
$location.path('login');
}
});
}
});
Моя проверка PHP:
$app->post('/sendreset', function() use ($app) {
$r = json_decode($app->request->getBody());
$post = [
'secret' => //== MY SECRET KEY ==//,
'response' => $r->form->response
];
$ch = curl_init('https://www.google.com/recaptcha/api/siteverify');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
$response = json_decode($response, true);
// check result
if (isset($response['success']) && $response['success'] == true) {
$response['status'] = 'success';
echoResponse(200, $response);
} else {
$response['status'] = 'error';
$response['message'] = 'Captcha test failed';
echoResponse(201, $response);
}
});
Функциональность данных работает правильно. Любая помощь будет принята с благодарностью.