Typo3 为什么页面不是';通过代码登录FE用户后是否无法访问?

Typo3 为什么页面不是';通过代码登录FE用户后是否无法访问?,typo3,extbase,typo3-7.6.x,Typo3,Extbase,Typo3 7.6.x,我正在尝试使用以下代码通过extbase扩展中的代码登录FrontendUser: $loginData = array( 'username' => $user['username'], 'uname' => $user['username'], 'uident' => $user['password'], 'uident_text' => $user['password'],

我正在尝试使用以下代码通过extbase扩展中的代码登录FrontendUser:

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

    $GLOBALS['TSFE']->fe_user->checkPid = FALSE;
    $info = $GLOBALS['TSFE']->fe_user->getAuthInfoArray();
    $user = $GLOBALS['TSFE']->fe_user->fetchUserRecord($info['db_user'], $loginData['username']);

    $login_success = $GLOBALS['TSFE']->fe_user->compareUident($user, $loginData);

    if ( $login_success ) {
        $GLOBALS['TSFE']->loginUser = TRUE;
        $GLOBALS['TSFE']->fe_user->fetchGroupData();
        $GLOBALS['TSFE']->fe_user->forceSetCookie = TRUE;
        $GLOBALS['TSFE']->fe_user->start();
        $GLOBALS['TSFE']->fe_user->createUserSession($user);
        $GLOBALS["TSFE"]->fe_user->loginSessionStarted = TRUE;
        $GLOBALS["TSFE"]->fe_user->user = $GLOBALS["TSFE"]->fe_user->fetchUserSession();

        return true;
    } else return false;
会话似乎存在,$GLOBALS['TSFE']->fe_user->user和groupData数组不是空的。因此,在我看来,用户已登录

但是,如果我试图呈现一些仅限于用户/组的页面内容,则结果为空

如果我使用默认登录表单与前端的用户一起登录,则用户可以访问这些页面

我做错了什么


非常感谢

找到了解决方案。在

$GLOBALS['TSFE']->gr_列表

有一个CSV,其中包含当前用户可以访问的组的UID。登录后需要进行更新。也许不是一个完美的解决方案,但在我的情况下,它有帮助

这是完整的代码

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

    $GLOBALS['TSFE']->fe_user->checkPid = FALSE;
    $info = $GLOBALS['TSFE']->fe_user->getAuthInfoArray();
    $user = $GLOBALS['TSFE']->fe_user->fetchUserRecord($info['db_user'], $loginData['username']);

    $login_success = $GLOBALS['TSFE']->fe_user->compareUident($user, $loginData);

    if ( $login_success ) {
        $GLOBALS['TSFE']->loginUser = TRUE;
        $GLOBALS['TSFE']->fe_user->forceSetCookie = TRUE;
        $GLOBALS['TSFE']->fe_user->start();
        $GLOBALS['TSFE']->fe_user->createUserSession($user);
        $GLOBALS["TSFE"]->fe_user->loginSessionStarted = FALSE;
        $GLOBALS["TSFE"]->fe_user->user = $GLOBALS["TSFE"]->fe_user->fetchUserSession();
        $GLOBALS['TSFE']->fe_user->fetchGroupData();

        // Extend the group list (so the user can access restricted pages)
        $GLOBALS['TSFE']->gr_list = implode(
            ',',
            array_unique(
                array_merge(
                    GeneralUtility::trimExplode(
                        ',',
                        $GLOBALS['TSFE']->gr_list
                    ),
                    $GLOBALS['TSFE']->fe_user->groupData['uid']
                )
            )
        );

        return true;
    } else return false;

不要这样做。这不是公共API。相反,为a post请求提供参数
username=X
userident=P
status=login
,并让API处理其余部分。谢谢您的提示。你的意思是我可以使用像GeneralUtility::getUrl()这样的东西向自身发出请求并将数据发送到登录?