JDoc: variables de servidor en joomla

Visto 31 veces
Saltar al primer mensaje no leído

JDoc

no leída,
23 abr 2013, 23:06:4723/4/13
a jokt...@googlegroups.com
Esto es una petición de correo vía http://jdoc.juuntos.net/ de:
andres gonzalez <andre...@gmail.com>

Que tal, buenas noches, les comento que quiero hacer un autologin en mi sitio joomla, recibiendo de otra aplicacion variables de servidor, pero nunca lo he trabajado, sera posible que me pudieran ayudar??

saludos y gracias por su apoyo

Hernán Roa Reyes

no leída,
25 abr 2013, 0:58:4025/4/13
a jokt...@googlegroups.com
Estimado Andrés, puedes crear un formulario html en tu otra aplicación con las siguientes características:

<form action="http://<TU SITIO>/index.php?option=com_users&view=login&task=user.login" method="post">
              <input type="text" name="username" value="<TU USUARIO>">
              <input type="password" name="password" value="<TU CLAVE>">
              <input type="hidden" name="a09b5c51ae3ce12d6e2d531f40ecdde9" value="1">          </fieldset>
</form>

Ten cuidado con el input hidden name: a09b5c51ae3ce12d6e2d531f40ecdde9, esto es en realidad un objeto TOKEN de jokte, algo así como:

<?php echo JHtml::_('form.token'); ?>

Este objeto que pertenece a la API de jokte se puede usar sólo en CMS que deriven de joomla. En la siguiente URL puedes encontrar información:

http://api.joomla.org/__filesource/fsource_Joomla-Platform_Session_librariesjoomlasessionsession.php.html#a741

La clase que crea el token es esta:

  protected function _createToken($length = 32)
    {
        static $chars = '0123456789abcdef';
        $max = strlen($chars) - 1;
        $token = '';
        $name = session_name();
        for ($i = 0; $i < $length; ++$i)
        {
            $token .= $chars[(rand(0, $max))];
        }
 
        return md5($token . $name);
    }

Por lo que puedes notar que de algún modo, se hace referencia al la sesión en curso del CMS (puede ser  la sesión anónima que se genera cuando aún no te has logueado). Luego el número que yo te he señalado en el formulario es sólo una referencia y no garantizo que te funcione siempre.

Lo correcto sería crear un plugin o por último una hoja php suelta que te sirviera como enlace, en esa hoja o plugin importas las librerías de jokte necesarias (si lo haces como plugin tienes mejor acoplamiento y tal vez no necesites importar toda la API), algo así como lo que sigue:

define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

if (file_exists(dirname(__FILE__) . '/defines.php')) {
    include_once dirname(__FILE__) . '/defines.php';
}

if (!defined('_JDEFINES')) {
    define('JPATH_BASE', dirname(__FILE__));
    require_once JPATH_BASE.'/includes/defines.php';
}

require_once JPATH_BASE.'/includes/framework.php';

Luego puedes poner ahí el procesamiento del formulario externo agregándole el:

JHtml::_('form.token');

o puedes dejar lo anterior en una variable de salida y llamarlo por ajax a tu otra aplicación (recuerda que los llamados ajax deben ocurrir en el mismo servidor, por lo que tu aplicación y tu jokte deben estar en la misma máquina).

También lo puedes hacer utilizando CURL y PHP, la forma es similar, la URL de destino debe ser:

http://<TU SITIO>/index.php?option=com_users&view=login&task=user.login

y las variables:

username = <TU USUARIO>
password = <TU CLAVE>


Espero haberte dado algunas ideas. Saludos,

Hernán Roa Reyes
Desarrollo Software




El 24/04/13 00:06, JDoc escribió:
Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos