Connectez un utilisateur dans joomla à partir de com_jumi (ou un autre script externe (à joomla))

StackOverflow https://stackoverflow.com/questions/1235858

  •  22-07-2019
  •  | 
  •  

Question

Je dois enregistrer automatiquement un utilisateur lorsque certains événements se produisent, par exemple lorsqu'un utilisateur a oublié son mot de passe et le réinitialiser avec succès. Selon les exigences du client, il faut utiliser un fichier incorporé. dans com_jumi pour effectuer la connexion et non utilisateur_com .

J'utilise la fonction login de l'objet JSite comme suit: $ mainframe- > login ($ informations d'identification, $ options)
et que cette méthode retourne true , je fais ensuite une redirection $ mainframe- > redirect ()
mais dans la page de destination, il n'y a pas d'utilisateur connecté ???

Me manque-t-il des étapes pour accomplir cela ???

Était-ce utile?

La solution

Je sais que c'est un ancien message, mais comme je l'avais trouvé l'autre jour avant de résoudre exactement le même problème, j'ai décidé de poster ma solution ici quand même.

C’est la fonction que j’ai créée pour me connecter (je n’utilise pas les options de mémorisation):

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

Autres conseils

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

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

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

$jAp = & JFactory::getApplication();  
$user = & JFactory::getUser();  
echo $user->get('id');  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top