从extbase设置fe_users会话

时间:2011-10-08 09:08:37

标签: typo3 extbase

由于我必须以某种方式验证登录数据,正常的登录扩展无法处理,我必须开发自定义登录表单。此登录框是分机的一部分。用extbase编写。

但我坚持一个基本问题:如何在extbase中处理fe_users会话?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

在TYPO3 6.2中,所提供的答案似乎都不适用于我。该修复程序在Forge的Bugreport中进行了描述,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 :(得分: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;
}