ti-enxame.com

Redefinição de senha de usuário do Joomla a partir de um script externo (autônomo)

Eu tenho o requisito para um usuário redefinir sua senha de um aplicativo móvel vinculado a um site Joomla. Consegui fazer logon (autenticando e retornando um ID da sessão), mas não parece ter muita sorte em redefinir uma senha para esse script externo.

Este código dispara com sucesso o POST usando o id da sessão do token de formulário necessário no 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>

Estou recebendo uma resposta de (bool) false ao tentar processar isso via cURL no entanto ...

<?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);

Isso (junto com outras 20 combinações de parâmetros de curvatura, alternância de código de URL, troca de matrizes/strings) retorna (bool) False.

Alguma falha óbvia nisso?

Os controles do Joomla requerem um certo cabeçote de ativação?

1
hngr18

O Curl espera os vars na forma de chave simples => value e, em seguida, codificado em http. Então você precisa definir:

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

Note, no "para o valor do campo do token

3
jdog