注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天上人间*bobo之家

有阳光的时段,就有他(她)的博客文章。也许天气并非晴空万里,博主的“博物钟”却是

 
 
 

日志

 
 

XCLASS解决felogin的referer的bug  

2009-11-16 17:35:27|  分类: typo3 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.新建ux_felogin插件
ext_localconf.php

<?php
if (!defined ('TYPO3_MODE')) die ('Access denied.');
    $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/felogin/pi1/class.tx_felogin_pi1.php'] =
      t3lib_extMgm::extPath("ux_felogin").'class.ux_tx_felogin_pi1.php';
?>
class.ux_tx_felogin_pi1.php
<?php
require_once(t3lib_extMgm::extPath('felogin').'pi1/class.tx_felogin_pi1.php');

class ux_tx_felogin_pi1 extends tx_felogin_pi1 {
   
    public function main($content,$conf)    {
            // Loading TypoScript array into object variable:
        $this->conf = $conf;
        $this->uploadDir = 'uploads/tx_felogin/';
           
            // Loading default pivars
        $this->pi_setPiVarDefaults();
       
            // Loading language-labels
        $this->pi_loadLL();

            // Init FlexForm configuration for plugin:
        $this->pi_initPIflexForm();
        $this->mergeflexFormValuesIntoConf();


            // Get storage PIDs:
        if ($this->conf['storagePid']) {
            $this->spid = $this->conf['storagePid'];
        } else {
            $pids = $GLOBALS['TSFE']->getStorageSiterootPids();
            $this->spid = $pids['_STORAGE_PID'];
        }

            // GPvars:
        $this->logintype = t3lib_div::_GP('logintype');
        $this->redirectUrl = t3lib_div::_GP('redirect_url');
   

            // if config.typolinkLinkAccessRestrictedPages is set, the var is return_url
        $returnUrl =  t3lib_div::_GP('return_url'); 
        if ($returnUrl) {
            $this->redirectUrl = $returnUrl;     
        }


            // Get Template
        $templateFile = $this->conf['templateFile'] ? $this->conf['templateFile'] : 'EXT:felogin/template.html';
        $this->template = $this->cObj->fileResource($templateFile);

            // Is user logged in?
        $this->userIsLoggedIn = $GLOBALS['TSFE']->loginUser;

            // Redirect
        if ($this->conf['redirectMode'] && !$this->conf['redirectDisable']&&!$this->redirectUrl) {
            $this->redirectUrl = $this->processRedirect();
        }


            // What to display
        $content='';
        if ($this->piVars['forgot']) {
            $content .= $this->showForgot();
        } else {
            if($this->userIsLoggedIn && !$this->logintype) {
                $content .= $this->showLogout();
            } else {
                $content .= $this->showLogin();
            }
        }

       
            // Process the redirect
        if (($this->logintype === 'login' || $this->logintype === 'logout') && $this->redirectUrl) {
            if (!$GLOBALS['TSFE']->fe_user->cookieId) {
                $content .= '<p style="color:red; font-weight:bold;">' . $this->pi_getLL('cookie_warning', '', 1) . '</p>';
            } else if($GLOBALS['TSFE']->loginUser||$this->logintype === 'logout'){
                header('Location: '.t3lib_div::locationHeaderUrl($this->redirectUrl));
                exit;
            }
        }
        return $this->conf['wrapContentInBaseClass'] ? $this->pi_wrapInBaseClass($content) : $content;
    }

     protected function processRedirect() {
        if ($this->conf['redirectMode']) {
            foreach (t3lib_div::trimExplode(',', $this->conf['redirectMode'],1) as $redirMethod) {
                if ($GLOBALS['TSFE']->loginUser && $this->logintype === 'login') {
                        // logintype is needed because the login-page wouldn't be accessible anymore after a login (would always redirect)
                        switch ($redirMethod) {
                        case 'groupLogin': // taken from dkd_redirect_at_login written by Ingmar Schlecht; database-field changed
                            $groupData = $GLOBALS['TSFE']->fe_user->groupData;
                            $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                                'felogin_redirectPid',
                                $GLOBALS['TSFE']->fe_user->usergroup_table,
                                'felogin_redirectPid!="" AND uid IN ('.implode(',',$groupData['uid']).')'
                            );
                            if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_row($res))    {
                                $redirect_url = $this->pi_getPageLink($row[0],array(),true); // take the first group with a redirect page
                            }
                        break;
                        case 'userLogin':
                            $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                                'felogin_redirectPid',
                                $GLOBALS['TSFE']->fe_user->user_table,
                                $GLOBALS['TSFE']->fe_user->userid_column . '=' . $GLOBALS['TSFE']->fe_user->user['uid'] . ' AND felogin_redirectPid!=""'
                            );
                            if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_row($res))    {
                                $redirect_url = $this->pi_getPageLink($row[0],array(),true);
                            }
                        break;
                        case 'login':
                            if ($this->conf['redirectPageLogin']) {
                                $redirect_url = $this->pi_getPageLink(intval($this->conf['redirectPageLogin']),array(),true);
                            }
                        break;
                        case 'getpost':
                            $redirect_url = $this->redirectUrl;
                        break;
                        case 'referer':
                            $redirect_url = t3lib_div::getIndpEnv('HTTP_REFERER');
                                // avoid forced logout, when trying to login immediatly after a logout
                            $redirect_url = ereg_replace("[&?]logintype=[a-z]+", '', $redirect_url);
                        break;
                        case 'refererDomains':
                                // Auto redirect.
                                // Feature to redirect to the page where the user came from (HTTP_REFERER).
                                // Allowed domains to redirect to, can be configured with plugin.tx_felogin_pi1.domains
                                // Thanks to plan2.net / Martin Kutschker for implementing this feature.
                            if (!$redirect_url && $this->conf['domains']) {
                                $redirect_url = t3lib_div::getIndpEnv('HTTP_REFERER');
                                    // is referring url allowed to redirect?
                                $match = array();
                                if (ereg('^http://([[:alnum:]._-]+)/', $redirect_url, $match)) {
                                    $redirect_domain = $match[1];
                                    $found = false;
                                    foreach(split(',', $this->conf['domains']) as $d) {
                                        if (ereg('(^|\.)'.$d.'$', $redirect_domain)) {
                                            $found = true;
                                            break;
                                        }
                                    }
                                    if (!$found) {
                                        $redirect_url = '';
                                    }
                                }

                                    // Avoid forced logout, when trying to login immediatly after a logout
                                $redirect_url = ereg_replace("[&?]logintype=[a-z]+", "", $redirect_url);
                            }
                        break;
                    }
                } else if ($this->logintype === 'login') { // after login-error
                    switch ($redirMethod) {
                        case 'loginError':
                            if ($this->conf['redirectPageLoginError']) {
                                $redirect_url = $this->pi_getPageLink(intval($this->conf['redirectPageLoginError']), array(), true);
                            }
                        break;
                    }
                } elseif ($this->logintype === 'logout') { // after logout

                    // Hook for general actions after after logout has been confirmed
                    if ($this->logintype === 'logout' && $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['felogin']['logout_confirmed']) {
                        $_params = array();
                        foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['felogin']['logout_confirmed'] as $_funcRef) {
                            if ($_funcRef) {
                                t3lib_div::callUserFunction($_funcRef, $_params, $this);
                            }
                        }
                    }

                    switch ($redirMethod) {
                        case 'logout':
                            if ($this->conf['redirectPageLogout']) {
                                $redirect_url = $this->pi_getPageLink(intval($this->conf['redirectPageLogout']), array(), true);
                            }
                        break;
                        case 'referer':
                            $redirect_url = t3lib_div::getIndpEnv('HTTP_REFERER');
                                // avoid forced logout, when trying to login immediatly after a logout
                            $redirect_url = ereg_replace("[&?]logintype=[a-z]+", '', $redirect_url);
                        break;
                    }
                } else { // not logged in
                        // Placeholder for maybe future options
                    switch ($redirMethod) {
                        case 'getpost':
                            // preserve the get/post value
                            $redirect_url = $this->redirectUrl;
                        break;
                        case 'referer':
                            $redirect_url = t3lib_div::getIndpEnv('HTTP_REFERER');
                                // avoid forced logout, when trying to login immediatly after a logout
                            $redirect_url = ereg_replace("[&?]logintype=[a-z]+", '', $redirect_url);
                        break;
                    }
                }

                if ($redirect_url && $this->conf['redirectFirstMethod']) {
                    break;
                }
            }
        }
        return $redirect_url;
    }

}
?>
2.安装插件即可
注:红色为添加部分
也可将ext_localconf.php中代码写在typo3conf目录下的localconf.php中而不用安装插件(不推荐)
if (!defined ('TYPO3_MODE')) die ('Access denied.');
    $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/felogin/pi1/class.tx_felogin_pi1.php'] =
PATH_typo3conf."class.ux_tx_felogin_pi1.php";

  评论这张
 
阅读(390)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018