Joomla 2.5 - 在未输入密码的情况下登录用户

3

我正在构建一个自定义的Joomla组件,正在寻找在不使用账户密码的情况下设置登录会话的方法。我已经有:

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

$result = $app->login(array(

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

));

这显然需要用户的密码。我可以访问用户ID和用户名,因此可以使用其中任何一个句柄。是否有其他对象或方法可用于登录用户,或者是否有一些自定义解决方案可用,例如手动设置所有所需的$ _SESSION变量?

非常感谢您的帮助:)


你为什么想要那样做? - Mr_Chimp
在组件管理区域,您可以登录该用户并查看其帐户,这对于项目是必要的 :) - jahilldev
我对Joomla不太熟悉,无法回答你的问题,但是你正在尝试绕过Joomla登录安全。我猜想密码在存储之前会被加密处理(如果没有,应该加密!),因此无法从数据库中提取密码。我认为你需要修改登录模块,并添加一些绕过密码检查的方法,也许可以直接设置当用户登录时Joomla设置的会话变量。但是,你要小心操作,因为这样做可能会暴露一个免密码进入网站的途径给任何想要的人。希望有所帮助。 - Mr_Chimp
2个回答

6

重要提示:在“注册所需会话变量”之后,需要添加会话对象。

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

非常好,谢谢。

未来的谷歌员工,这个答案本应该是对@oasisfleeting回答的编辑,已经被添加到了回答中。尽管如此,这仍然是一个好的发现,所以你可以给两个答案都点赞。 :) - Mohd Abdul Mujib

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

}

$session->set('user',$jUser) 这一行代码正在将我的页面重定向到登录页面。我不明白为什么,请帮忙解决。 - Sayed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接