it-swarm.dev

Reimpostazione password utente Joomla da uno script esterno (autonomo)

Ho l'obbligo per un utente di reimpostare la password da un'applicazione mobile che si collega a un sito Joomla. Ho avuto successo nell'accesso (autenticazione e restituzione di un sessionid) ma non sembra avere molta fortuna con il ripristino di una password per questo script esterno.

Questo codice attiva correttamente POST utilizzando l'id di sessione token modulo richiesto richiesto in 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>

Ricevo una risposta di (bool) false quando provo a elaborarlo tramite cURL tuttavia ...

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

Questo (insieme a circa 20 altre combinazioni di parametri di arricciatura, attivazione/disattivazione del codice url, scambio di matrici/stringhe) restituisce (bool) Falso.

Qualche difetto evidente con questo?

I controlli Joomla richiedono un determinato httpheader?

1
hngr18

Curl si aspetta i var in chiave semplice => valore, quindi codificato http. Quindi è necessario impostare:

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

Nota, no "per il valore del campo del campo token

3
jdog