it-swarm-id.com

Reset Kata Sandi Pengguna Joomla dari Skrip Eksternal (Standalone)

Saya memiliki persyaratan bagi pengguna untuk mengatur ulang kata sandi mereka dari aplikasi seluler yang tertaut ke situs Joomla. Saya telah berhasil masuk (mengotentikasi dan mengembalikan sessionid) tetapi tampaknya tidak terlalu beruntung dengan mengatur ulang kata sandi untuk skrip eksternal ini.

Kode ini berhasil memicu POST menggunakan id sesi token formulir yang diperlukan di 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>

Saya mendapatkan respons (bool) false ketika mencoba memproses ini melalui cURL namun ...

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

Ini (bersama dengan sekitar 20 kombinasi parameter curl lainnya, toggling urlencode, swapping of array/string) mengembalikan (bool) False.

Adakah kesalahan yang jelas dengan ini?

Apakah kontrol Joomla memerlukan httpheader tertentu?

1
hngr18

Curl mengharapkan vars dalam bentuk nilai kunci => sederhana, kemudian http dikodekan. Jadi, Anda perlu mengatur:

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

Catatan, tidak "untuk nilai bidang dari bidang token

3
jdog