У меня есть ссылка для автоматического входа на один домен — этот домен используется для авторизации:
https://example.com/api/login/{key}/{username}
После перехода по этой ссылке пользователь перенаправляется в панель управления:
https://example.com
Если что-то не так — пользователь перенаправлен на
https://example.com/login page.
В другом домене example2.com
пользователи имеют панель биллинга и ссылку https://example.com/api/login/{key}/{username}
находится в нем.
Так что мне нужно сделать чек из example2.com
в example.com
как это:
$url = https://example.com/api/login/{key}/{username};
if function-to-check-autologin($url) == "true" {
//do something
}
Мой результат поиска — curl, но я не могу настроить запрос самостоятельно.
Как я мог это сделать? завиток или другой способ?
Вы не объяснили, что такое «автоматический вход» или как он работает. Все ваши домены «example.com», поэтому все они являются одним доменом. Конечно, вы не облегчаете людям понимание вашего вопроса. Я постараюсь изложить, как я это понимаю.
У вас есть пользователь вошел в один интернет-домен, и вы хотите перенаправить
их на второй домен, где они должны оставаться в системе.
Есть много способов сделать это, но все они зависят от определенных условий.
Если вы используете стандартный метод входа в http, вы можете перенаправить на второй домен с помощью:
Поскольку вы указываете, что используете SSL-сертификат на обоих сайтах, это было бы достаточно безопасно. Это будет работать, даже если вы не разделяете базу данных.
Если оба домена используют одну и ту же базу данных, вы можете передать зашифрованную ссылку на зарегистрированный сеанс пользователя. Вот как я это делаю нормально. Я храню сессии в своей базе данных, и у каждой сессии есть свой идентификатор. Я зашифрую это, подойдет любой хороший метод, и отправлю его во второй домен, где я расшифрую его так:
https://example.com?key=DgGyC28Sw3eQFvY9hz2dBkfmCa5zMgV6nN4Jj8VeD76chf7
Конечно, сам сеанс должен сообщать вам, вошел ли пользователь в систему. Убедитесь, что ваш метод шифрования безопасен.
В обоих случаях, если URL попадет в чужие руки, логин может быть подделан. Вот почему использование SSL важно, но некоторые риски остаются.
Хотя ваш вопрос неопределенный, я бы дал вам несколько подсказок.
Прежде всего, вы должны установить CURLOPT_SSL_VERIFYPEER
возможность false
если вы не собираетесь иметь дело с сертификатом сверстника.
Также вы должны указать CURL для обработки перенаправлений. Это предполагает, что вы установили CURLOPT_FOLLOWLOCATION
вариант, а также CURLOPT_MAXREDIRS
а также CURLOPT_AUTOREFERER
,
Для отправки данных POST с запросом необходимо установить CURLOPT_POST
возможность true
а также CURLOPT_POSTFIELDS
в массив данных POST или строки в кодировке URL.
Как только запрос CURL выполнен, вы можете узнать всю информацию о нем по curl_getinfo
функция. Называя это с CURLINFO_REDIRECT_COUNT
как 2-й параметр даст количество перенаправлений, и CURLINFO_EFFECTIVE_URL
— последний эффективный URL.
Так что код может выглядеть так:
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_NOBODY => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 1,
CURLOPT_AUTOREFERER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data_array,
));
$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_REDIRECT_COUNT) == 1 && curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) == $sample_redirect_url)
echo 'OK';