由於我必須以某種方式驗證登錄數據,所以普通的登錄擴展無法處理,我必須開發一個自定義登錄表單。此登錄框是分機的一部分。寫在extbase。從extbase設置fe_users會話
但我堅持一個基本的問題:我如何處理extbase中的fe_users會話?
由於我必須以某種方式驗證登錄數據,所以普通的登錄擴展無法處理,我必須開發一個自定義登錄表單。此登錄框是分機的一部分。寫在extbase。從extbase設置fe_users會話
但我堅持一個基本的問題:我如何處理extbase中的fe_users會話?
我終於做到了,結合了大量的片段。那它是如何摸索出適合我:
$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;
}
我寫這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;
無似乎在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);
()。 (!!!)
您是否注意到您的if行子句以分號結尾?(!!!)您的代碼段幾乎允許任何人使用任何密碼登錄,因爲:if(false); {echo'hello'; }我希望任何人使用這個片段已經檢查失敗狀態。 – j4k3
我重新強調了半年前我在這個答案上留下的評論:這段代碼被破壞了!它允許任何正確的用戶名使用任何密碼登錄!刪除這個垃圾,所以沒有人使用它! – j4k3
我刪除了分號,所以您不必重新強調。感謝您指出。 – madc