2012-04-04 35 views
3

Ich erstelle eine benutzerdefinierte Joomla-Komponente und prüfe, wie ich eine Login-Sitzung einrichten kann, ohne ein Account-Passwort zu verwenden. Ich habe bereits:Joomla 2.5 - Benutzer ohne Passwort anmelden

$app = &JFactory::getApplication('site'); 

$result = $app->login(array(

    'username' => 'james', 
    'password' => 'password' 

)); 

Welche offensichtlich erfordert das Benutzerkennwort. Ich habe Zugriff auf die Benutzer-ID und den Benutzernamen, sodass einer dieser Handles verwendet werden kann. Gibt es ein anderes Objekt oder eine Methode, mit der ich einen Benutzer anmelden kann, oder gibt es eine benutzerdefinierte Lösung, die ich verwenden kann, z. B. manuell alle erforderlichen $ _SESSION-Variablen?

Vielen Dank im Voraus, jede Hilfe sehr geschätzt :)

+0

Warum möchten Sie das tun? –

+0

So in der Komponente Admin-Bereich können Sie als dieser Benutzer anmelden und ihr Konto anzeigen, ist es für das Projekt erforderlich :) – jhdevuk

+0

Jeder? Keine Ideen? :) – jhdevuk

Antwort

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

      // Register the needed session variables 
      $session =& JFactory::getSession(); 
      $session->set('user',$jUser); 


      // Check to see the the session already exists.       
      $app->checkSession(); 

      // Update the user related fields for the Joomla sessions table. 
      $db->setQuery(
        'UPDATE '.$db->quoteName('#__session') . 
        ' SET '.$db->quoteName('guest').' = '.$db->quote($instance->get('guest')).',' . 
        ' '.$db->quoteName('username').' = '.$db->quote($instance->get('username')).',' . 
        ' '.$db->quoteName('userid').' = '.(int) $instance->get('id') . 
        ' WHERE '.$db->quoteName('session_id').' = '.$db->quote($session->getId()) 
      ); 
      $db->query(); 

      // 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

Die Zeile '$ session-> set ('user', $ jUser) 'leitet meine Seite auf die Anmeldeseite um. Ich konnte nicht verstehen warum. Bitte helfen Sie. – Sayed

6

WICHTIG: Ist necesary das Sitzungsobjekt nach // Registrieren Sie die benötigten Sitzungsvariablen

// Register the needed session variables 
$session =& JFactory::getSession(); 
$session->set('user', $jUser); 

ausgezeichnet, thx

hinzufügen
+0

Zukünftige Googler, diese Antwort sollte eine Bearbeitung der Antwort von @oasisfleeting sein, die hinzugefügt wurde. Trotzdem war es ein guter Fang, also mach weiter, du kannst beides verbessern. :) –

Verwandte Themen