Tenemos una secuencia de comandos independiente en nuestro sitio que se encuentra junto a una instalación de Joomla 1.5. Estamos utilizando la autenticación de Joomla para restringir el acceso a nuestro script. En este momento estamos redireccionando a cualquier usuario no autorizado al sitio de Joomla para iniciar sesión. Sin embargo, queremos agregar una capacidad de inicio de sesión dentro de nuestro script. ¿Alguien sabe cómo iniciar sesión en Joomla desde un script externo usando un nombre de usuario/contraseña? ¡Gracias!¿Cómo iniciar sesión en joomla a través de un script externo?
Respuesta
<?php
//http://domain.com/script/script.php?username=username&passwd=password
define('_JEXEC', 1);
define('JPATH_BASE', '../');
define('DS', DIRECTORY_SEPARATOR);
require_once('../configuration.php');
require_once (JPATH_BASE .DS.'includes'.DS.'defines.php');
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php');
require_once (JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php');
/* Create the Application */
$mainframe =& JFactory::getApplication('site');
jimport('joomla.plugin.helper');
$credentials = array();
$credentials['username'] = JRequest::getVar('username', '', 'method', 'username');
$credentials['password'] = JRequest::getVar('passwd', '', 'method', 'passwd');
//perform the login action
$error = $mainframe->login($credentials);
$user = JFactory::getUser();
//now you are logged in
$mainframe->logout();
//now you are logged out
que sugeriría una de las siguientes soluciones:
- Escribe un login plugin específica a la secuencia de comandos.
- Usando CURL en su secuencia de comandos para hacer un post-Solicitud en el formulario de inicio de sesión normal (Curl puede hacer frente a las galletas, también.)
- (más simple): No autenticar por Joomla !, pero con .htaccess.
para Joomla 3.x a continuación es más limpio y útil. Debajo de los códigos se verificará el nombre de usuario y la contraseña codificados. Si el usuario existe, será redireccionado a la página index.php.
<?php
/**
* Joomla! External authentication script
*
* @author vdespa
* Version 1.0
*
* Code adapted from /index.php
*
* @package Joomla.Site
*
* @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
if (version_compare(PHP_VERSION, '5.3.1', '<'))
{
die('Your host needs to use PHP 5.3.1 or higher to run this version of Joomla!');
}
/**
* Constant that is checked in included files to prevent direct access.
* define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower
*/
define('_JEXEC', 1);
if (file_exists(__DIR__ . '/defines.php'))
{
include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
// Instantiate the application.
$app = JFactory::getApplication('site');
jimport('joomla.plugin.helper');
// JFactory
require_once (JPATH_BASE .'/libraries/joomla/factory.php');
// Hardcoded for now
$credentials['username'] = 'admin';
$credentials['password'] = 'admin';
// Get a database object
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('id, password')
->from('#__users')
->where('username=' . $db->quote($credentials['username']));
$db->setQuery($query);
$result = $db->loadObject();
if ($result)
{
$match = JUserHelper::verifyPassword($credentials['password'], $result->password, $result->id);
if ($match === true)
{
// Bring this in line with the rest of the system
$user = JUser::getInstance($result->id);
echo 'Joomla! Authentication was successful!' . '<br>';
echo 'Joomla! Token is:' . JHTML::_('form.token');
//perform the login action
$error = $app->login($credentials);
$logged_user = JFactory::getUser();
var_dump($logged_user);
//redirect logged in user
$app->redirect('index.php');
}
else
{
// Invalid password
// Prmitive error handling
echo 'Joomla! Token is:' . JHTML::_('form.token') . '<br>';
die('Invalid password');
}
} else {
// Invalid user
// Prmitive error handling
die('Cound not find user in the database');
}
Trabajó en Joomla 3.4.1 –
¿Qué sucede si el usuario ya está autenticado en esta aplicación con otro método, entonces $ credenciales no están disponibles. ¿Todavía es posible comenzar la sesión joomla? – frthjf
He hecho esto y está funcionando bien. Asumiendo que su script de conexión personalizada es login.php
-Go to Joomla installation directory
-Copy PasswordHash.php from this directory /root/libraries/phpass/ to your external script's folder
-Include the PasswordHash.php in login.php
-Create an instance of PasswordHash like this:
Aquí está el código php fragmento
$phpass = new PasswordHash(10, true);
$password= "unhashed user password";
$db_password = 'Your hashed password in the database';
$ok= $phpass->CheckPassword($password, $db_password);
?>
Y ahí estás --- comprobación de la contraseña devolverá verdadero si el dos contraseñas coinciden. NB: Necesita escribir una consulta para verificar automáticamente desde la base de datos.
- 1. ¿Cómo iniciar y ejecutar un script externo en segundo plano?
- 2. cómo iniciar sesión en otro sitio a través de PHP
- 3. ¿Cómo ejecuta un script al iniciar sesión en * nix?
- 4. ¿Cómo stackoverflow logra iniciar sesión a través de Gmail?
- 5. Script Bash: uso del comando "script" de un script bash para iniciar sesión
- 6. incluye la clase Jfactory en un archivo php externo, Joomla
- 7. ¿Para iniciar sesión o no iniciar sesión?
- 8. Asp.Net script en un archivo js externo
- 9. Iniciar sesión mediante un script en un servidor remoto y ejecutar un conjunto de comandos
- 10. Acceso a datos de sesión fuera de Joomla
- 11. Cómo puedo establecer puntos de interrupción en un script JS externo en Firebug
- 12. C# - Cerrar sesión y iniciar sesión programáticamente en un usuario
- 13. ¿Iniciar sesión en Sinatra?
- 14. Cómo iniciar sesión como usuario en p4
- 15. TortoiseSVN a través de un script proxy
- 16. Cómo creo un crontab a través de un script
- 17. joomla password encryption
- 18. cómo iniciar sesión en Yahoo programáticamente desde un servidor ubuntu
- 19. Iniciar sesión en un archivo en Android
- 20. Componente de Joomla 2.5 a Joomla 3.0
- 21. Traducciones de Magento en script externo
- 22. ¿Cómo iniciar sesión en un foro de vbulletin con C#?
- 23. Django iniciar sesión/cerrar sesión
- 24. iOS: ¿Cómo autenticar a un usuario después de iniciar sesión (para inicio de sesión automático)?
- 25. ¿Cómo ejecuto un script php a través de SSH?
- 26. ¿Cómo puedo iterar a través de líneas en un archivo externo con shell?
- 27. cómo iniciar sesión en la máquina ec2?
- 28. Inicializando un valor a través de una variable de sesión
- 29. Cómo iniciar sesión en Gerrit como administrador
- 30. MongoDB archivo de script externo
¡Perfecto! Eso es exactamente lo que estaba buscando. – user77413
'$ error = $ mainframe-> login ($ credentials);' es incorrecto; debería verse como '$ result = $ mainframe-> login ($ credentials);' – simon