2009-08-05 6 views
0

Je dois enregistrer un utilisateur automatiquement lorsque certains événements se produisent, par exemple lorsqu'un utilisateur a oublié son mot de passe et le réinitialiser avec succès. Par les exigences du client, il faut utiliser un fichier intégré dans com_jumi pour effectuer la connexion et non com_user.Connectez-vous un utilisateur dans joomla de com_jumi (ou un autre script externe (à joomla))

J'utilise la connexion de la fonction de l'objet JSite comme dans: $mainframe->login($credentials, $options)
et cette méthode est de retour true, je fais un redirect $mainframe->redirect()
mais dans la page de destination il n'y a pas l'utilisateur connecté ???

Ai-je manqué quelques étapes pour accomplir ceci ???

+0

Avez-vous vérifié si $ mainframe-> login() est appelé et si $ credentials a un tableau approprié? les clés de tableau doivent avoir un nom d'utilisateur et un mot de passe. $ options devrait avoir le souvenir de moi dans le tableau si vous voulez que joomla garde un cookie souvenir moi – jtanmay

Répondre

2

Je sais que c'est un vieux billet, mais comme j'ai moi-même trouvé cet article l'autre jour avant de résoudre exactement le même problème, j'ai décidé de poster ma solution ici de toute façon.

C'est la fonction que j'ai créé pour vous connecter (je ne suis pas en utilisant le me souviens d'options):

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; 
} 
+0

Parfait, j'ai trouvé cela comme le plus simple de tous, merci – mukamaivan

0
//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); 
    } 
} 
+0

Merci d'avoir posté une réponse! Alors qu'un extrait de code pourrait répondre à la question, il est toujours bon d'ajouter des informations complémentaires, comme expliquer, etc. – j0k

0

Je préfère utiliser l'ID utilisateur et pour obtenir l'ID utilisateur avec Jumi dans Joomla I faire:

defined('_JEXEC') OR defined('_VALID_MOS') OR die("Direct Access Is Not Allowed"); 

$jAp = & JFactory::getApplication(); 
$user = & JFactory::getUser(); 
echo $user->get('id');