web-dev-qa-db-fra.com

Réinitialisation du mot de passe utilisateur Joomla à partir d'un script externe (autonome)

J'ai l'obligation pour un utilisateur de réinitialiser son mot de passe à partir d'une application mobile qui crée un lien vers un site Joomla. J'ai réussi à me connecter (authentification et renvoi d'une session), mais je ne semble pas avoir beaucoup de chance avec la réinitialisation d'un mot de passe pour ce script externe.

Ce code déclenche avec succès POST) à l'aide de l'ID de session de jeton de formulaire requis requis dans 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>

Je reçois une réponse de (bool) false lorsque j'essaie de traiter cela via cURL cependant ...

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

Ceci (avec environ 20 autres combinaisons de paramètres curl, bascule d'urlencode, permutation de tableaux/chaînes) renvoie (bool) False.

Des fautes évidentes avec ça?

Les contrôles Joomla nécessitent-ils un certain httpheader?

1
hngr18

Curl attend les vars sous forme de clé simple => valeur, puis codés en http. Donc, vous devez définir:

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

Remarque, non "pour la valeur de champ du champ de jeton

3
jdog