2011-10-08 31 views
1

由於我必須以某種方式驗證登錄數據,所以普通的登錄擴展無法處理,我必須開發一個自定義登錄表單。此登錄框是分機的一部分。寫在extbase。從extbase設置fe_users會話

但我堅持一個基本的問題:我如何處理extbase中的fe_users會話?

回答

2

我終於做到了,結合了大量的片段。那它是如何摸索出適合我:

$loginData = array(
    'uname' => $loginData['user'], 
    'uident' => $loginData['passw'], 
    'status' => 'login' 
); 

$GLOBALS['TSFE']->fe_user->checkPid = 0; 
$info = $GLOBALS['TSFE']->fe_user->getAuthInfoArray(); 
$user = $GLOBALS['TSFE']->fe_user->fetchUserRecord($info['db_user'], $loginData['uname']); 
if ($GLOBALS['TSFE']->fe_user->compareUident($user,$loginData)) 
{ 
    $GLOBALS["TSFE"]->fe_user->user = $GLOBALS["TSFE"]->fe_user->fetchUserSession(); 
    $GLOBALS['TSFE']->loginUser = 1; 
    $GLOBALS['TSFE']->fe_user->fetchGroupData(); 
    $GLOBALS['TSFE']->fe_user->start(); 
    $GLOBALS["TSFE"]->fe_user->createUserSession($user); 
    $GLOBALS["TSFE"]->fe_user->loginSessionStarted = TRUE; 
} 
+0

您是否注意到您的if行子句以分號結尾?(!!!)您的代碼段幾乎允許任何人使用任何密碼登錄,因爲:if(false); {echo'hello'; }我希望任何人使用這個片段已經檢查失敗狀態。 – j4k3

+0

我重新強調了半年前我在這個答案上留下的評論:這段代碼被破壞了!它允許任何正確的用戶名使用任何密碼登錄!刪除這個垃圾,所以沒有人使用它! – j4k3

+0

我刪除了分號,所以您不必重新強調。感謝您指出。 – madc

4

我寫這function,也許它可以幫助:

/** @var $fe_user tslib_feUserAuth */ 
$fe_user = $GLOBALS['TSFE']->fe_user; 
$fe_user->createUserSession(array('uid' => $uid)); 
$fe_user->user = $fe_user->getRawUserByUid($uid); 
$fe_user->fetchGroupData(); 
$GLOBALS['TSFE']->loginUser = 1; 

它是由Tx_Phpunit_Framework::loginFrontEndUser($userId)啓發:

提供的答案
// Instead of passing the actual user data to createUserSession, we 
// pass an empty array to improve performance (e.g. no session record 
// will be written to the database). 
$GLOBALS['TSFE']->fe_user->createUserSession(array()); 
$GLOBALS['TSFE']->fe_user->user = $GLOBALS['TSFE']->fe_user->getRawUserByUid($userId); 
$GLOBALS['TSFE']->fe_user->fetchGroupData(); 
$GLOBALS['TSFE']->loginUser = 1; 
4

無似乎在TYPO3 6.2中爲我工作。該修補程序在僞造的Bugreport中描述,https://forge.typo3.org/issues/62194。基本上,SessionCookie不會自動放置了,你需要做的是對自己的現在,調用createUserSession後加入

 $reflection = new \ReflectionClass($GLOBALS['TSFE']->fe_user); 
     $setSessionCookieMethod = $reflection->getMethod('setSessionCookie'); 
     $setSessionCookieMethod->setAccessible(TRUE); 
     $setSessionCookieMethod->invoke($GLOBALS['TSFE']->fe_user); 

()。 (!!!)