php - page - post title wordpress codex
PHP, publicar cURL para iniciar sesiĆ³n en WordPress (4)
Kalium consiguió este derecho: las rutas en la interfaz de WordPress son relativas, lo que hace que la interfaz de administración no funcione correctamente cuando se accede de esta manera.
Su enfoque es preocupante de varias maneras, por lo que me gustaría hacer algunas recomendaciones rápidas.
En primer lugar, trataría de encontrar la manera de eliminar las variables $username
y $password
de que estén codificadas. Piense en lo fácil que es romper esto: si la contraseña se actualiza a través de la interfaz de administración, por ejemplo, el valor codificado en su código ya no será correcto y su "inicio de sesión automático" fallará. Además, si alguien de alguna forma comprende el sitio y obtiene acceso a handshake.php
, bueno, ahora tienen el nombre de usuario y la contraseña para tu blog.
Parece que su instalación de WordPress se basa en el mismo servidor que el script de handshake que ha escrito, dado que la ruta a /blog
es relativa (en su código de muestra). En consecuencia, sugiero tratar de imitar la sesión que validan en el inicio de sesión de sus aplicaciones principales. He hecho esto varias veces en el pasado, simplemente no puedo recordar los detalles. Por lo tanto, por ejemplo, su secuencia de comandos de inicio de sesión no solo configuraría sus credenciales de inicio de sesión, sino que también configuraría las claves de sesión requeridas para la autenticación de WordPress.
¡Este proceso implicará cavar a través de mucho código de WordPress, pero esa es la belleza del código abierto! En lugar de usar cURL y valores de codificación, intente simplemente integrar el mecanismo de autenticación de WordPress en el mecanismo de inicio de sesión de su aplicación. Comenzaría mirando la fuente de wp-login.php
y yendo desde allí.
Si todo lo demás falla y está decidido a no intentar conectar su mecanismo de autenticación de sesión con el de WordPress, entonces podría solucionar su problema de inmediato (sin reparar los aspectos más preocupantes de su enfoque) con estos cambios en su código:
Primero, agregue el siguiente curl_opt:
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); // Enables session support
Luego, agregue esto luego de cerrar el controlador 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();
Por lo tanto, en esta solución menos que ideal, utilizaría cURL para autenticar al usuario y, en lugar de intentar secuestrar la interfaz de administración en esa página actual, redirigirlos a la interfaz de administración habitual.
¡Espero que esto ayude! Avíseme si necesita más ayuda / la solución no está clara.
Estoy trabajando en un proyecto para un cliente que necesita un inicio de sesión automático desde un enlace.
Estoy usando una página de saludo para hacer esto con el siguiente código:
$username = "admin";
$password = "blog";
$url = "http://wordpressblogURL/";
$cookie = "cookie.txt";
$postdata = "log=" . $username . "&pwd=" . $password . "&wp-submit=Log%20In&redirect_to=" . $url . "blog/wordpress/wp-admin/&testcookie=1";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url . "blog/wordpress/wp-login.php");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($ch, CURLOPT_REFERER, $url . "blog/wordpress/wp-login.php");
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
curl_close($ch);
echo $result;
exit;
Esto funciona bien Me registra en grande.
El problema es que creo que las claves de WordPress están fuera de la URL.
Para más detalles, mi página de handshake (que me registra) está en el directorio "blog" y mi aplicación WordPress está en el directorio "wordpress" que se encuentra dentro del directorio "blog". La URL en el navegador dice ..blog/handshake.php
. Sin embargo, tiene la sección Admin de WordPress en la ventana del navegador. Los enlaces de WordPress Admin ahora no funcionan correctamente, porque la URL está en el directorio ../blog
cuando debe estar en el ..blog/wordpress/wp-admin
.
¿Hay alguna manera en cURL para que la URL en el navegador refleje la página real?
¿Debería usar FSockOPen en su lugar?
Si su secuencia de comandos no realiza todas las funciones que necesita en una sola ejecución, es posible que necesite analizar los valores de la cookie, almacenarlos en un archivo y luego volver a enviarlos en la siguiente ejecución. Mira la opción CURLOPT_COOKIEFILE.
Use la clase de Cookies de Zend Framework para administrarlos por usted. Lo he usado en el pasado para rastrear secciones seguras de un sitio web usando cURL .
Verifique la fuente HTML. Parece que los enlaces de WP pueden ser relativos. Sin embargo, en lugar de hacer este proceso aún más complicado de lo que ya es, le sugiero que realice el inicio de sesión, entregue al usuario las cookies que sean necesarias y redirijalas.
De lo contrario, estás codificando un proxy, pieza por pieza.