簡體   English   中英

Joomla用戶登錄,注冊,啟動會話

[英]Joomla user login, register, start session

我正在准備joomla插件/ api連接網站與mobileapp。 我不能使用cookies,我只需要請求即可。

所以要登錄我可以訪問http://example.net/?user=aaa&pass=bbb並創建會話並返回令牌。

要轉到用戶配置文件,我可以訪問: http//example.net/profiletick = 8asd7g ...如果令牌匹配數據庫中的會話ID,那么它在Joomla框架中設置會話cookie(在php端)

我應該使用哪個事件:

  1. 檢查令牌並維護會話
  2. 檢查登錄,用戶和登錄/創建會話
  3. 檢查登錄,用戶和注冊用戶

第二個問題是:

  1. 它應該設置$session->set('userid',$user->id);
  2. 我創建了假的$ response和$app->triggerEvent('onUserLogin', array((array) $response, array('action' => 'core.login.admin'))); 夠了嗎?

如果有人需要這里幾乎是完成解決方案。 它允許用戶通過用戶登錄並傳遞采取的表單url或請求標頭,它允許訪問基於令牌i url而不是cookie的網站的受限制部分,它允許從頭部傳遞params到JInput-> get。

<?php
/**
 * @package     API
 * @subpackage  System.sittetokenlogin
 *
 */

defined('_JEXEC') or die('Unauthorized Access');

jimport('joomla.filesystem.file');


class PlgSystemSittetokenlogin extends JPlugin
{
    public function __construct(&$subject, $config)
    {
        parent::__construct($subject, $config);
    }


    public function onUserAuthenticate()
    {
        //die('onUserAuthenticate');

    }
    public function onUserLogin()
    {//wykonuje się
        //die('onUserLogin');

    }

    public function onUserLogout()
    {//wykonuje się
        //die('onUserLogout');

    }   


    public function onAfterInitialise()
    {
        //wstępne ustawienie obiektów
        $app = JFactory::getApplication();
        if ($app->isClient('administrator')) return;
        $input = JFactory::getApplication()->input;
        $headers = getallheaders ();
        $db = JFactory::getDbo();

        //pobranie danych z rządania
        $loginToken = $headers['logintoken']; if(!$loginToken) $loginToken = $input->get->get('logintoken', '', 'STRING');
        $suser = $headers['suser']; if(!$suser) $suser = $input->get->get('suser', '', 'STRING');
        $spass = $headers['spass']; if(!$spass) $spass = $input->get->get('spass', '', 'STRING');

        if ($loginToken) // logowanie na bazie tokenu
            {
            JPluginHelper::importPlugin('user');
            $sesja = $db->setQuery('SELECT * FROM `#__session` WHERE `session_id`='.$db->quote($loginToken).' LIMIT 1')->loadObject();      
            $user = $db->setQuery('SELECT * FROM `#__users` WHERE `id`='.$db->quote($sesja->userid).' LIMIT 1')->loadObject();      

            $response = new JAuthenticationResponse();
            $response->type          = 'Joomla';
            $response->email         = $user->email;
            $response->fullname      = $user->name;
            $response->username      = $user->username;
            $response->password      = '';
            $response->status        = JAuthentication::STATUS_SUCCESS; 
            $response->error_message = null;
            //print_r($response);
            $app->triggerEvent('onUserLogin', array((array) $response, array('action' => 'core.login.site')));

            //$testuser = JFactory::getUser(); die(print_r($testuser,true));  
            }

        elseif ($suser && $spass) //logowanie na bazie loginu i hasła
            {
            $error = $app->login([
                'username' => $suser,
                'password' => $spass,
            ]);
            $user = JFactory::getUser();
            if ($user->id>0) die(JFactory::getSession()->getId());
            else die('login_error');
            }


        //przekazywanie parametrów
        $option = $headers['option']; $input->set('option',$option);
        $view = $headers['view']; $input->set('view',$view);
        $id = $headers['id']; $input->set('id',$id);
        $catid = $headers['catid']; $input->set('catid',$catid);
        $Itemid = $headers['Itemid']; $input->set('Itemid',$Itemid);
        $tmpl = $headers['tmpl'];  $input->set('tmpl',$tmpl);

        //$input->set('option','com_guru');
        //$input->set('view','gurupcategs');


    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM