Ответ 1
Kalium получил это право - пути в интерфейсе WordPress относительны, в результате чего интерфейс администрирования не работает должным образом при доступе таким образом.
Ваш подход касается нескольких способов, поэтому я хотел бы сделать несколько быстрых рекомендаций.
Во-первых, я попытался бы найти способ удалить переменные $username
и $password
из жесткого кодирования. Подумайте, как легко это сломаться - если пароль обновляется через интерфейс администрирования, например, жестко закодированное значение в вашем коде больше не будет корректным, и ваш "автоматический вход" теперь завершится неудачей. Кроме того, если кто-то каким-то образом содержит сайт и получает доступ к handshake.php
- ну, теперь у них есть имя пользователя и пароль для вашего блога.
Похоже, что ваша установка WordPress лежит на том же сервере, что и рукопожатие script, которое вы указали, поскольку путь к /blog
относительный (в вашем примере кода). Соответственно, я предлагаю попытаться имитировать сеанс, который они проверяют, в вашем логическом входе в родительские приложения. Я делал это несколько раз в прошлом - просто не могу вспомнить специфику. Так, например, ваш логин script не только установит ваши учетные данные для входа, но также установит ключи сеанса, необходимые для аутентификации WordPress.
Этот процесс будет включать в себя копание много кода WordPress, но это красота с открытым исходным кодом! Вместо использования значений cURL и жесткого кодирования попробуйте просто интегрировать механизм аутентификации WordPress в механизм входа в приложение. Я бы начал с изучения источника wp-login.php
и оттуда.
Если все остальное терпит неудачу, и вы решили не пытаться объединить механизм проверки подлинности сеанса с механизмом проверки подлинности WordPress, тогда вы можете сразу исправить свою проблему (не исправляя больше аспектов вашего подхода) с этими изменениями в свой код
Сначала добавьте следующий curl_opt:
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); // Enables session support
Затем добавьте это после закрытия обработчика cURL:
curl_close($ch);
// Instead of echoing the result, redirect to the administration interface, now that the valid, authenticated session has been established
header('location: blog/wordpress/wp-admin/');
die();
Итак, в этом менее идеальном решении вы должны использовать cURL для аутентификации пользователя, а затем вместо попытки захватить интерфейс администрирования на эту текущую страницу перенаправить их на обычный интерфейс администрирования.
Надеюсь, это поможет! Дайте мне знать, если вам нужна дополнительная помощь/решение не ясно.