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

Posted

技术标签:

【中文标题】TYPO3 v10 - 在 eID_include 中使用上下文 API 获取 feUser 对象【英文标题】:TYPO3 v10 - Getting feUser Object using context API in eID_include 【发布时间】:2020-08-21 12:40:43 【问题描述】:

我使用的代码需要为 V10 更新

    $this->feUser = EidUtility::initFeUser();

当使用以下代码(随机)控制器时,上下文为我提供了正确的登录 feUser 对象。

    $context = GeneralUtility::makeInstance(Context::class);
    $user = $context->getAspect('frontend.user');
    DebuggerUtility::var_dump($user);

当在 eID_include 类中使用相同的代码时 No 给出 userObject

具体在下面的类中

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

是否需要引导上下文?

【问题讨论】:

我现在也遇到了同样的问题。你找到解决办法了吗?如果我创建一个扩展前端用户身份验证器中间件的中间件,并将这个中间件放在 eid 中间件之前,我也必须创建上下文,如果我在文件转储挂钩中检查这个上下文,似乎有些事情没有按预期工作,因为缺少用户组,isLoggedIn 方法返回 false。 @Fox 我还没有找到可行的解决方案,为此工作暂停。如果您找到解决方案示例,请在下方发布。 【参考方案1】:

我遇到了同样的问题。您可以更改中间件的顺序:https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/RequestHandling/Index.html

我在我的扩展的“配置”目录中创建了一个新文件 RequestMiddlewares.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',
            ]
        ]
    ]
];

您必须刷新 TYPO3 和 PHP 缓存并检查“配置”后端模块中的顺序(选择“HTTP 中间件 (PSR-15)”)。

通过此设置,可以获得上下文属性“frontent.user”

$context = GeneralUtility::makeInstance(Context::class);

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

【讨论】:

感谢您的意见。由于建议我不要更改核心中间件堆栈,因此我添加了自己的中间件,它是 EidMiddleWare 的副本。在以下拉取请求中,您可以找到两个示例。 Pull request 这是个坏主意,因为您更改了内部标记的配置,请参阅github.com/TYPO3/TYPO3.CMS/blob/10.4/typo3/sysext/frontend/…。看看 Sebastian Fischer 的答案,这是正确的解决方案。【参考方案2】:

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

如果您需要前端处理的一部分,您可以添加自己的中间件,依赖于 TYPO3\CMS\Frontend\Middleware\FrontendUserAuthenticator,或者在打字稿中使用页面对象。

【讨论】:

以上是关于TYPO3 v10 - 在 eID_include 中使用上下文 API 获取 feUser 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在typo3 V10的extbase控制器中重定向到404页面

TYPO3 v10 没有作曲家自动加载的功能测试

TYPO3 v10 动作控制器和子文件夹内的模板

TYPO3 v10 routeEnhancer 生成 slug 但无法解决

从 TYPO3 v9 升级到 v10 后:显示页面不再工作(无法访问受保护的财产)

TYPO3 V10 - EXT:news 自定义类型和持久性映射