2009-08-05 2 views
0

Мне нужно автоматически регистрировать пользователя, когда происходят определенные события, например, когда пользователь забыл свой пароль и успешно его выполнил. По требованиям клиента необходимо использовать файл, встроенный , в com_jumi, чтобы сделать логин, а не com_user.Вход пользователя в joomla из com_jumi (или другого внешнего сценария (для joomla))

Я использую функцию вход объекта JSite как в: $mainframe->login($credentials, $options)
и что метод возвращает true, то я делаю редирект $mainframe->redirect()
но на целевой странице не есть ни один пользователь вошел в ???

Я пропустил некоторые шаги, чтобы выполнить это ???

+0

Вы проверили, вызывается ли $ mainframe-> login(), и если $ credentials имеет правильный массив? ключи массива должны иметь имя пользователя и пароль. $ options должны помнить меня в массиве, если вы хотите, чтобы joomla сохранил помнить меня cookie – jtanmay

ответ

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

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

0

Я предпочитаю использовать идентификатор пользователя, и получить идентификатор пользователя с Jumi в 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');