在 Slack 频道的帮助下,我最终得到了一个解决方案,可以重定向到用户请求的任何访问受限页面:
它适用于 TYPO3 v9+
在站点配置 ( config.yaml
) 中:
errorHandling:
-
errorCode: '403'
errorHandler: PHP
errorPhpClassFQCN: Vendor\ExtName\Error\ErrorHandling
在setup.typoscript
扩展名中felogin
:
config.typolinkLinkAccessRestrictedPages = {$plugin.tx_extname.settings.loginPid}
config.typolinkLinkAccessRestrictedPages_addParams = &return_url=###RETURN_URL###
// Redirect after login on Login page to previous page
plugin.tx_felogin_pi1 {
showLogoutFormAfterLogin = 0
redirectMode = getpost,referer
redirectFirstMethod = 1
}
在我的扩展中(这里命名为 `Vendor\ExtName`):
<?php
namespace Vendor\ExtName\Error;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Core\Context\Context;
use TYPO3\CMS\Core\Error\PageErrorHandler\PageErrorHandlerInterface;
use TYPO3\CMS\Core\Http\RedirectResponse;
use TYPO3\CMS\Core\Utility\GeneralUtility;
class ErrorHandling implements PageErrorHandlerInterface
{
/**
* @param ServerRequestInterface $request
* @param string $message
* @param array $reasons
* @return ResponseInterface
*/
public function handlePageError(
ServerRequestInterface $request,
string $message,
array $reasons = []
): ResponseInterface {
//check whether user is logged in
$context = GeneralUtility::makeInstance(Context::class);
if($context->getPropertyFromAspect('frontend.user', 'isLoggedIn')){
//show page with info that the access restricted page can't be visited because of missing access rights
return new RedirectResponse('/zugang-verweigert');
}
return new RedirectResponse('/login?return_url=' . $request->getUri()->getPath(), 403);
}
}