Я создаю веб-сервис с Zend, и я должен аутентифицировать пользователей перед отправкой ответа. Пользователь отправит запрос на страницу сервера, используя curl, передав свои учетные данные в виде curl_setopt($curl, CURLOPT_USERPWD, 'key:pass')
;
Iam с использованием рамки Zend, поэтому серверная страница обозначается так:
http://www.example.com/app_name/public/controller/action/parameter
Вот полный код для запроса пользователя (client.php):
<?php $curl = curl_init('http://www.example.com/app/public/user/add/1'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_USERPWD, 'username:password'); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_USERAGENT, 'Sample Code'); $response = curl_exec($curl); $resultStatus = curl_getinfo($curl); if($resultStatus['http_code'] == 200) { echo $response; } else { echo 'Call Failed '.print_r($resultStatus); } ?>
Теперь я хочу, чтобы я мог получить имя пользователя и пароль на стороне сервера (в моем контроллере zend), чтобы я мог проверить учетные данные пользователя из базы данных и отправить ответ соответствующим образом. Итак, как я могу выполнять аутентификацию на другой странице?
Zend Framework имеет готовый компонент для обработки HTTP-аутентификации.
Осмотрите примеры на
Если вы не хотите использовать это, вы все равно можете пойти по пути «старой школы», как описано в
и вручную проверьте $_SERVER['PHP_AUTH_USER']
и $_SERVER['PHP_AUTH_PW']
Вы должны установить CURLOPT_HTTPAUTH
в CURLAUTH_BASIC
.
Таким образом, в целевом скрипте будут доступны PHP_AUTH_USER
и PHP_AUTH_PW
(обычный текст).
Сценарий вызова:
<?php $ch = curl_init('https://localhost/target.php'); // ... curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_exec($ch); ?>
В target.php:
$user = $_SERVER['PHP_AUTH_USER']; $pass = $_SERVER['PHP_AUTH_PASS'];
Я предлагаю выполнить запрос cURL по HTTPS, поскольку имя пользователя и пароль передаются простым текстом.
вы можете отправить имя пользователя и пароль в виде полей для отправки
$post_data = $user.":".$pass curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
вы можете получить учетные данные, используя $ _POST