Abbiamo uno script standalone sul nostro sito adiacente all'installazione di Joomla 1.5. Utilizziamo l'autenticazione Joomla per limitare l'accesso al nostro script. A questo punto stiamo reindirizzando gli utenti non autorizzati al sito Joomla per accedere. Vogliamo aggiungere una funzionalità di accesso all'interno del nostro script, però. Qualcuno sa come accedere a joomla da uno script esterno usando un nome utente/password? Grazie!Come accedere a joomla tramite uno script esterno?
risposta
<?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
vorrei suggerire una delle seguenti soluzioni:
- Scrivi una login plugin specifico per lo script.
- Utilizzando CURL nello script di fare un post di richiesta sul modulo di login normale (CURL può far fronte i cookie, anche.)
- (più semplice): Non autenticare da Joomla !, ma da .htaccess.
per Joomla 3.x sotto è più pulita e disponibile. Sotto i codici si verificheranno username e password hardcoded. Se l'utente è già esistente, verrà reindirizzato alla pagina 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');
}
Lavorato in Joomla 3.4.1 –
Cosa succede se l'utente è già autenticato in questa applicazione con un altro metodo, quindi $ credenziali non sono disponibili. È ancora possibile avviare la sessione di joomla? – frthjf
Ho fatto questo e sta funzionando bene. Assumendo che lo script di accesso personalizzato è 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:
Qui è il codice php frammento di
$phpass = new PasswordHash(10, true);
$password= "unhashed user password";
$db_password = 'Your hashed password in the database';
$ok= $phpass->CheckPassword($password, $db_password);
?>
E ci sei --- controllare la password restituirà true se la due password corrispondono. NB: è necessario scrivere una query per controllare automaticamente dal database.
- 1. Come accedere all'output di uno script PowerShell?
- 2. TortoiseSVN tramite uno script proxy
- 3. Avvia uno script come root tramite ADB
- 4. Come ottenere scons per richiamare uno script esterno?
- 5. Come caricare uno script JavaScript esterno nel documento SVG (puro)?
- 6. Gradle: impossibile configurare l'artefatto da uno script di build esterno
- 7. inserisci un BLOB tramite uno script sql?
- 8. Come accedere all'intestazione HTTP della richiesta in uno script CGI?
- 9. Come accedere agli argomenti rimanenti in uno script di pesce
- 10. Componente da Joomla 2.5 a Joomla 3.0
- 11. Come accedere alle variabili d'ambiente in uno script Expect?
- 12. Come accedere a Weave DNS-Server da esterno?
- 13. Come accedere a journald (systemd) tramite Python?
- 14. Come posso accedere a file S3 protetti in uno script CFN?
- 15. Come interrompere un processo automaticamente tramite uno script batch
- 16. Spring, reindirizzamento a url esterno tramite POST
- 17. Traduzioni Magento in script esterno
- 18. Come posso creare un nuovo account utente Joomla all'interno di uno script?
- 19. Impossibile accedere a un membro non statica di tipo esterno tramite tipo annidato
- 20. Come accedere a un database SQL Server da uno script Perl in Linux?
- 21. Invia messaggio a uno script Python
- 22. Come faccio a fare riferimento a uno spazio dei nomi C++ esterno da uno nidificato?
- 23. Come eseguire il codice nella shell Django con uno script Python esterno?
- 24. Posso accedere ai DATI da uno script richiesto in Ruby?
- 25. Joomla ha violato. Come prevenire?
- 26. Come posso chiamare uno script python da uno script python
- 27. IPython: come faccio a riversare qualcosa in uno script Python
- 28. Chiamare una funzione C++ tramite uno script Python
- 29. Connessione al database tramite proxy uno script python
- 30. Bash - Come passare argomenti a uno script letto tramite lo standard input reindirizzato
Perfetto! Questo è esattamente quello che stavo cercando. – user77413
'$ error = $ mainframe-> login ($ credenziali);' è sbagliato; dovrebbe apparire come '$ result = $ mainframe-> login ($ credentials);' – simon