Php TYPO3 v10-在eID_include中使用上下文API获取feUser对象

Php TYPO3 v10-在eID_include中使用上下文API获取feUser对象,php,typo3,typo3-9.x,typo3-10.x,Php,Typo3,Typo3 9.x,Typo3 10.x,我在V10中使用并需要更新的代码 $this->feUser = EidUtility::initFeUser(); 当使用以下代码(随机)控制器时,上下文为我提供了正确的登录feUser对象 $context = GeneralUtility::makeInstance(Context::class); $user = $context->getAspect('frontend.user'); DebuggerUtility::var_dump($

我在V10中使用并需要更新的代码

    $this->feUser = EidUtility::initFeUser();
当使用以下代码(随机)控制器时,上下文为我提供了正确的登录feUser对象

    $context = GeneralUtility::makeInstance(Context::class);
    $user = $context->getAspect('frontend.user');
    DebuggerUtility::var_dump($user);
eID中使用相同的代码时,会给出include
用户对象

具体在下面的课堂上

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['FileDumpEID.php']['checkFileAccess']['xxx'] = My\Class\Hooks\FileDumpHook:class

是否需要引导上下文?

因为TYPO3\CMS\Frontend\Middleware\EidHandler中间件是在TYPO3\CMS\Frontend\Middleware\FrontendUserAuthenticator中间件之前按中间件顺序执行的,我认为这是不可能的


如果您需要前端处理的一部分,您可以添加一个自己的中间件,使用TYPO3\CMS\frontend\middleware\FrontendUserAuthenticator,或者在typoscript中使用页面对象。

我也有同样的问题。您可以更改中间件的顺序:

我在扩展名的“Configuration”目录中创建了一个新文件requestmiddleware.php:

<?php

return [
    'frontend' => [
        'typo3/cms-frontend/eid' => [
            'disabled' => true
        ],
        'typo3/cms-frontend/eid-new' => [
            'target' => \TYPO3\CMS\Frontend\Middleware\EidHandler::class,
            'after' => [
                'typo3/cms-frontend/tsfe',
            ],
            'before' => [
                'typo3/cms-frontend/prepare-tsfe-rendering',
            ]
        ]
    ]
];

我现在也遇到了同样的挣扎。你找到解决办法了吗?如果我创建了一个中间件,它扩展了前端用户认证器中间件,并将该中间件放在eid中间件之前,我也必须创建上下文,如果我在文件转储挂钩中检查该上下文,似乎有些东西没有按预期工作,因为用户组丢失,并且isLoggedIn方法返回false。@我还没有找到一个有效的解决方案,此项的工作已暂停。如果你找到一个解决方案的例子,很高兴在下面发布。谢谢你的输入。由于建议我不要更改核心中间件堆栈,我添加了自己的中间件,它是EID中间件的副本。在下面的pull请求中,您可以找到两个示例。这是一个坏主意,因为您更改了内部标记的配置,请参阅。看看塞巴斯蒂安·菲舍尔的答案,这是正确的解决方案。
$context = GeneralUtility::makeInstance(Context::class);

if($context->getPropertyFromAspect('frontend.user', 'isLoggedIn')) {