2009-08-05 16 views
0

特定のイベントが発生したときにユーザを自動的にログする必要があります。たとえば、ユーザがパスワードを忘れて のパスワードを忘れて正常にリセットしました。クライアントの要件によっては、ではなく、com_jumiに を埋め込んだファイルを使用してログインする必要があります。joomlaのユーザをcom_jumi(または他の外部(joomla)スクリプトに)

私はのようにJSiteオブジェクトの機能ログインを使用しています:$mainframe->login($credentials, $options)
及びその方法はtrueを返して、それから私はリダイレクト$mainframe->redirect()
を作るが、ランディングページにログインしているどのユーザーがありません?

これを達成するためのいくつかのステップがありませんか?

+0

$ mainframe-> login()が呼び出されているか、$ credentialsに適切な配列があるかどうかを確認しましたか?配列キーにはユーザー名とパスワードが必要です。あなたがjoomlaに私のクッキーを覚えておいてほしいならば、$ optionsは覚えておいてください。 – 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

私はユーザーIDを使用することを好む、とJoomlaの私にJumiでユーザーIDを取得しますdo:

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

$jAp = & JFactory::getApplication(); 
$user = & JFactory::getUser(); 
echo $user->get('id'); 
関連する問題