Typo3 从extbase设置fe_用户会话

Typo3 从extbase设置fe_用户会话,typo3,extbase,Typo3,Extbase,由于我必须以某种方式验证登录数据,普通登录扩展无法处理,因此我必须开发一个自定义登录表单。此登录框是用extbase编写的ext.的一部分 但我遇到了一个基本问题:如何在extbase中处理fe_用户会话 我终于成功了,通过整合大量片段。我就是这么想的: $loginData = array( 'uname' => $loginData['user'], 'uident' => $loginData['passw'], 'status' => 'login' );

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


但我遇到了一个基本问题:如何在extbase中处理fe_用户会话

我终于成功了,通过整合大量片段。我就是这么想的:

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

我终于做到了,通过结合大量的片段。我就是这么想的:

$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;
}
我写了这封信,也许有帮助:

/** @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;
它的灵感来自:

我写了这封信,也许有帮助:

/** @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;
它的灵感来自:


在TYPO3 6.2中,提供的答案似乎都不适合我。修复在Forge中的Bugreport中进行了描述。基本上,SessionCookie不再自动放置,您现在需要自己完成,并添加

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

调用createUserSession()之后。

在TYPO3 6.2中,提供的答案似乎都不适用于我。修复在Forge中的Bugreport中进行了描述。基本上,SessionCookie不再自动放置,您现在需要自己完成,并添加

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

调用createUserSession()之后。

您是否注意到带有if子句的行以分号结尾?(!!!)您的代码段几乎允许任何使用任何密码的人登录,因为:if(false);{echo'hello';}我希望使用此代码段的任何人都检查了失败状态。我再次强调了半年多前我在这个答案上留下的评论:此代码已被破坏!它允许任何正确的用户名登录任何密码!把这个垃圾拿走,这样就没人用了!我去掉了分号,所以你不必再强调了。感谢您指出。事实上,它现在在任何情况下都不会起作用,因为标识总是失败的,而您只是忽略了CompareIdentit给您的假返回。您是否注意到带有if子句的行以分号结尾?(!!!)您的代码片段几乎可以让任何拥有密码的人登录,因为:if(false);{echo'hello';}我希望使用此代码段的任何人都检查了失败状态。我再次强调了半年多前我在这个答案上留下的评论:此代码已被破坏!它允许任何正确的用户名登录任何密码!把这个垃圾拿走,这样就没人用了!我去掉了分号,所以你不必再强调了。谢谢你指出。事实上,它现在在任何情况下都不起作用了,因为身份验证总是失败的,而你只是忽略了CompareIdentint给你的假报税表。