Установка сеанса fe_users из extbase - PullRequest
1 голос
/ 08 октября 2011

Поскольку я должен проверять данные для входа в систему, обычные расширения для входа в систему не могут справиться, я должен разработать собственную форму для входа.Этот логин является частью доп.написано в extbase.

Но я застрял с основным вопросом: как я могу обрабатывать сессии fe_users в extbase?

Ответы [ 3 ]

4 голосов
/ 11 мая 2012

Я написал эту функцию , может быть, это поможет:

/** @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 голосов
/ 27 марта 2015

Похоже, что ни один из предоставленных ответов не помог мне в TYPO3 6.2. Исправление описано в Bugreport в Forge, https://forge.typo3.org/issues/62194. По сути, SessionCookie больше не размещается автоматически, вам нужно сделать это самостоятельно, добавив

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

после вызова createUserSession ().

2 голосов
/ 12 октября 2011

Я наконец сделал это, объединив множество фрагментов. Вот как это сработало для меня:

$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;
}
...