TYPO3 v10 - Получение объекта feUser с использованием контекстного API в eID_include

Код, который я использовал и который нужно обновить для V10

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

При использовании следующего кода (случайного) контроллера контекст дает мне правильный объект входа feUser.

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

При использовании того же кода в eID_include классе не указывается userObject.

Конкретно в следующем классе

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

Нужен ли контекст начальной загрузки?


person Joey Bouten    schedule 06.05.2020    source источник
comment
Сейчас я сталкиваюсь с той же борьбой. Вы нашли решение? Если я создаю промежуточное программное обеспечение, которое расширяет промежуточное программное обеспечение для проверки подлинности внешнего интерфейса пользователя и помещает это промежуточное программное обеспечение перед промежуточным программным обеспечением eid, мне также нужно создать контекст, и если я проверю этот контекст внутри крючка дампа файла, кажется, что что-то не сработало, как ожидалось, потому что группы пользователей отсутствуют, а метод isLoggedIn возвращает false.   -  person Fox    schedule 23.06.2020
comment
@Fox Я еще не нашел рабочего решения, работа над этим приостановлена. Если вы найдете пример решения, с удовольствием разместите его ниже.   -  person Joey Bouten    schedule 29.06.2020


Ответы (2)


Поскольку промежуточное ПО TYPO3 \ CMS \ Frontend \ Middleware \ EidHandler выполняется до промежуточного ПО TYPO3 \ CMS \ Frontend \ Middleware \ FrontendUserAuthenticator в порядке промежуточного программного обеспечения, я не думаю, что это возможно.

Если вам нужны части обработки внешнего интерфейса, вы можете либо добавить собственное промежуточное ПО с зависимостью от TYPO3 \ CMS \ Frontend \ Middleware \ FrontendUserAuthenticator, либо использовать объект страницы в типографском сценарии.

person Sebastian Fischer    schedule 06.05.2020

У меня такая же проблема. Вы можете изменить порядок промежуточного ПО: https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/RequestHandling/Index.html

Я создал новый файл RequestMiddlewares.php внутри каталога Configuration моего расширения:

<?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 Cache и проверить порядок в бэкэнд-модуле конфигурации (выберите HTTP Middlewares (PSR-15)).

При такой настройке можно получить свойство контекста frontent.user.

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

if($context->getPropertyFromAspect('frontend.user', 'isLoggedIn')) {
person R. v. Rickenbach    schedule 28.08.2020
comment
Спасибо за ваш вклад. Поскольку мне не рекомендовали изменять основной стек промежуточного программного обеспечения, я добавил свое собственное промежуточное программное обеспечение, которое является копией EidMiddleWare. В следующем запросе на перенос вы можете найти два примера. Запрос на извлечение - person Joey Bouten; 31.08.2020
comment
Это плохая идея, потому что вы меняете внутреннюю помеченную конфигурацию, см. github.com/TYPO3/TYPO3.CMS/blob/10.4/typo3/sysext/frontend/. Взгляните на ответ Себастьяна Фишера, который, тем не менее, является правильным решением. - person Simon Gilli; 02.12.2020