2009-08-05 441 views
0

当某些事件发生时,我必须自动登录用户,例如,用户忘记了 他的密码并成功重置它。根据客户要求,必须使用嵌入的文件com_jumi来进行登录,而不是com_user从com_jumi(或其他外部(joomla)脚本)登录joomla的用户

我使用JSite对象的功能登录为:$mainframe->login($credentials, $options)
和方法返回true,然后我做一个重定向$mainframe->redirect()
但在着陆页没有用户登录???

我是否缺少一些步骤来完成此操作?

+0

你检查是否$ mainframe-> login()被调用,如果$凭证有适当的数组?数组键必须使用用户名和密码。 $选项应该有记住我在数组中,如果你想让joomla保持记住我的cookie – jtanmay 2010-08-13 17:59:37

回答

2

我知道这是一个旧帖子,但由于我自己在解决完全相同的问题之前发现了这篇文章,我决定在这里发布我的解决方案。

这是我创建登录功能(我不使用的记得我的选项):

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

完美,我发现这是最简单的,谢谢 – mukamaivan 2012-09-12 19:06:41

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

感谢您发布一个答案!虽然代码片段可以回答这个问题,但添加一些附加信息仍然很棒,比如解释等。 – j0k 2012-09-26 10:06:40

0

我更喜欢使用用户ID,并在的Joomla我JUMI获得用户ID做:

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

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