Accedi a un utente in joomla da com_jumi (o da un altro script esterno (a joomla))
Domanda
Devo registrare automaticamente un utente quando si verificano determinati eventi, ad esempio quando un utente ha dimenticato
la sua password e reimpostarla correttamente. Per esigenze del cliente è necessario utilizzare un file incorporato
in com_jumi
per effettuare il login e non com_user
.
Sto usando la funzione login dell'oggetto JSite come in: $ mainframe- > login ($ credentials, $ options)
e quel metodo restituisce true
, quindi faccio un reindirizzamento $ mainframe- > redirect ()
ma nella landing page non ci sono utenti registrati ???
Mi mancano alcuni passaggi per realizzare questo ???
Soluzione
So che questo è un vecchio post, ma poiché io stesso ho trovato questo post l'altro giorno prima di risolvere esattamente lo stesso problema, ho deciso di pubblicare la mia soluzione qui comunque.
Questa è la funzione che ho creato per accedere (non sto usando le opzioni Ricordami):
function joomla_login($user,$pass)
{
if ( !$user) return false;
if ( !$pass) return false;
$credentials = array( 'username' => $user, 'password' => $pass );
$login_site =& JFactory::getApplication('site');
$login_site->login($credentials, $options=array());
return;
}
Altri suggerimenti
//log user in
if(!JFactory::getUser()->id)
{
$email = (string)$response['linkedin']->{'email-address'};
$db = JFactory::getDbo();
$app = JFactory::getApplication();
$sql = "SELECT * FROM #__users WHERE email = " . $db->quote($email);
$db->setQuery($sql);
$result = $db->loadObject();
if($result->id)
{
$jUser = JFactory::getUser($result->id);
//$userarray = array();
//$userarray['username'] = $jUser->username;
//$userarray['password'] = $jUser->password;
//$app->login($userarray);
$instance = $jUser;
$instance->set('guest', 0);
$instance->set('aid', 1);
$instance->set('usertype', 'Registered');
// Register the needed session variables
$session->set('user',$instance);
// Check to see the the session already exists.
//$app->checkSession();
//$app->_createSession($session->getId());
// Update the user related fields for the Joomla sessions table.
/*$db->setQuery(
'UPDATE '.$db->nameQuote('#__session') .
' SET '.$db->nameQuote('guest').' = '.$db->quote($instance->get('guest')).',' .
' '.$db->nameQuote('username').' = '.$db->quote($instance->get('username')).',' .
' '.$db->nameQuote('userid').' = '.(int) $instance->get('id') .
' WHERE '.$db->nameQuote('session_id').' = '.$db->quote($session->getId())
);
$db->query();*/
// Get the session object
$table = & JTable::getInstance('session');
$table->load( $session->getId() );
$table->guest = $instance->get('guest');
$table->username = $instance->get('username');
$table->userid = intval($instance->get('id'));
$table->usertype = $instance->get('usertype');
$table->gid = intval($instance->get('gid'));
$table->update();
// Hit the user last visit field
$instance->setLastVisit();
//return true;
$app->redirect('index.php?option=com_community&view=profile');
}
else
{
$url = "index.php?option=com_community&view=register";
$app->redirect($url,'We did not find your email address in our system. Please register.');
//echo "redirect to registration page";
//exit();
//$url = 'index.php?option=com_users&view=registration&name=' . $user_profile['name'] . '&username=' . $user_profile['username'] . '&email=' . $user_profile['email'];
//$url = JRoute::_($url);
//$app->redirect($url);
}
}
Preferisco usare l'ID utente e ottenere l'ID utente con Jumi in Joomla lo faccio:
defined('_JEXEC') OR defined('_VALID_MOS') OR die( "Direct Access Is Not Allowed" );
$jAp = & JFactory::getApplication();
$user = & JFactory::getUser();
echo $user->get('id');