it-swarm-es.tech

Restablecimiento de contraseña de usuario de Joomla desde un script externo (independiente)

Tengo el requisito de que un usuario restablezca su contraseña desde una aplicación móvil que se vincula a un sitio de Joomla. He tenido éxito al iniciar sesión (autenticar y devolver un ID de sesión) pero no parece tener mucha suerte al restablecer una contraseña para este script externo.

Este código activa con éxito el POST usando el formulario de identificación de sesión de token requerido en Joomla:

<?php
define('_JEXEC', 1);
define( 'DS', DIRECTORY_SEPARATOR );
//define('JPATH_BASE', dirname(__FILE__));
define('JPATH_BASE', '../');

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

require '../libraries/import.php';
?>
<div>
<form 
id="user-registration" 
action="http://siteurl/component/users/com_users/?task=reset.request" 
method="post">

<input 
type="text" 
name="jform[email]" 
value="[email protected]" 
size="30">

<button 
type="submit"
>Submit</button>

<input 
type="hidden" 
name="<?php echo JUtility::getToken(); ?>" 
value="1">
</form>
</div>

Sin embargo, obtengo una respuesta de (bool) false cuando intento procesar esto a través de cURL ...

<?php 
$token = JUtility::getToken();
$emailadr = '[email protected]';


$url = 'http://[i]siteurl[/i]/component/users/com_users/?task=reset.request';
$vars = 'jform[email]='.urlencode($emailadr).'&'.urlencode($token).'="1"';

echo $vars;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0 );
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
$response = curl_exec($ch);

var_dump($response);

Esto (junto con otras 20 combinaciones de parámetros de rizo, alternar código de urlen, intercambio de matrices/cadenas) devuelve (bool) Falso.

¿Alguna falla obvia con esto?

¿Los controles de Joomla requieren cierto httpheader?

1
hngr18

Curl espera los vars en clave simple => forma de valor, luego codificado en http. Entonces necesitas configurar:

$vars = 'jform[email]='.urlencode($emailadr).'&'.urlencode($token).'=1';

Nota, no "para el valor de campo del campo de token

3
jdog