TYPO3访问受限页面-登录后重定向



对于受限页面、登录和重定向,有什么实际的最佳实践吗?

我发现了很多例子,但都是针对旧的TYPO3/felogin/。。。。版本(无站点配置(

我有以下场景:

我有几个限制页面和一个登录页面(felogin(

我希望能够深度链接(例如,按邮件发送(到受限页面-如果用户未登录,则应显示登录表单-成功登录/注册后,应显示深度链接页面。

我使用TYPO3 9.5,在站点配置中,我添加了403处理来显示登录页面的内容。

此步骤运行良好-显示登录页面。

我在felogin插件中配置了referrer和GET/POST重定向,但这些都不起作用。

有人举过一个例子吗?在成功登录/注册后,我可以重定向到原始的被叫(受限(页面?

谢谢

基督教

对于GET/POST重定向,您需要URL参数&return_url=。也许您可以尝试在403处理程序中重写GET params以包含它。那可能是金子。

我是这样做的:(登录页面有uid=81(

  • 站点配置:(显示登录页面的内容(
    errorHandling:
    - errorCode: '403'
    errorHandler: Page
    errorContentSource: 't3://page?uid=81'
    ...
    
  • 类型脚本:
    config {
    typolinkLinkAccessRestrictedPages = 81
    typolinkLinkAccessRestrictedPages_addParams = &return_url=###RETURN_URL###&pageId=###PAGE_ID###
    }
    # all plugin configuration via TypoScript. plugin settings in the backend unchanged.
    plugin.tx_felogin_pi1 {
    redirectMode = getpost,login
    redirectFirstMethod = 1
    linkConfig.parameter = 81
    redirectPageLogin = 96
    ...
    }
    
  • 注销链接:<f:link.page pageUid="81" title="Logout" additionalParams="{logintype: 'logout'}">...</f:link.page>

优点:

  • 适用于所有使用打字链接的页面(因此所有默认菜单、链接…(
  • 您可以通过电子邮件等共享URL

缺点:

  • 当直接访问访问受限页面时,您将看到登录页面。然而,登录后,您将被重定向到配置的";重定向页面登录";第(96(页。但是,如果我省略了该配置,则根本不会重定向,因此用户将停留在登录页面上

所以我不是100%满意。让我们在这里收集最佳实践示例。欢迎反馈。

在Slack频道的帮助下,我最终找到了一个解决方案,可以将重定向到用户请求的访问受限页面

适用于TYPO3 v9+

在站点配置(config.yaml(中:

errorHandling:
-
errorCode: '403'
errorHandler: PHP
errorPhpClassFQCN: VendorExtNameErrorErrorHandling

在扩展feloginsetup.typoscript中:

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 VendorExtNameError;
use PsrHttpMessageResponseInterface;
use PsrHttpMessageServerRequestInterface;
use TYPO3CMSCoreContextContext;
use TYPO3CMSCoreErrorPageErrorHandlerPageErrorHandlerInterface;
use TYPO3CMSCoreHttpRedirectResponse;
use TYPO3CMSCoreUtilityGeneralUtility;
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);
}
}

我没有向应该保护的页面添加用户组访问权限。相反,我在受保护页面的根目录中添加了一个模板,其中包含:

[page["uid"] != 2 && usergroup(1) == false]
page.config >
page.config.additionalHeaders.10 {
header = Location: https://myurl.tld/login
}
[end]

在没有用户组1的有效FE用户会话的情况下,对受保护页面的所有直接访问都将重定向到登录页面(UID=2(。

这意味着页面树分支包含所有受保护的页面。模板中的page当然必须是包含PAGE对象的数组。。。

这适用于TYPO3 V9.5。

相关内容

  • 没有找到相关文章

最新更新