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

7

有没有关于受限页面、登录和重定向的最佳实践?

我找到了很多例子,但都是针对旧版本的TYPO3 / felogin /...(没有站点配置)。

我的场景如下:

我有几个受限制的页面和一个登录页面(felogin)。

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

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

这个步骤很好用 - 登录页面被显示。

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

有没有人有一个例子可以告诉我如何在成功登录/注册后重定向到原始调用的(受限制的)页面?

谢谢

Christian

3个回答

5

对于GET/POST重定向,您需要使用URL参数&return_url=。也许您可以尝试重写403处理程序中的GET参数来包含它。这可能非常有用。

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

  • Site config: (show content from login page)
    errorHandling:
      - errorCode: '403'
        errorHandler: Page
        errorContentSource: 't3://page?uid=81'
    ...
    
  • TypoScript:
    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
      ...
    }
    
  • Logout link: <f:link.page pageUid="81" title="Logout" additionalParams="{logintype: 'logout'}">...</f:link.page>

优点:

  • 使用typolink时适用于所有页面(所以所有默认菜单、链接等)
  • 您可以通过电子邮件等方式共享URL

缺点:

  • 当直接访问受访问限制的页面时,您将看到登录页面。但是,在登录后,您将被重定向到配置的“redirectPageLogin”页面(96)。如果我省略该配置,则不会有任何重定向,因此用户仍停留在登录页面上。

所以我并不完全满意。让我们在这里收集最佳实践示例。欢迎反馈意见。


这是一个相当不错的解决方案... 但在我看来,它的缺点是替换了访问页面的内容,而不是重定向到登录页面。我想知道为什么没有重定向错误处理程序... - rantanplan

4
在 Slack 频道的帮助下,我最终采用了重定向方案,将用户请求重定向至所需的受限访问页面。适用于 TYPO3 v9+。在站点配置文件(config.yaml)中实现:
errorHandling:
  -
    errorCode: '403'
    errorHandler: PHP
    errorPhpClassFQCN: Vendor\ExtName\Error\ErrorHandling

在扩展程序 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
}

<?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);
    }

}

0

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

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

所有未经过用户组1有效前端用户会话保护页面的直接访问都将被重定向到登录页面(UID = 2)。

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

这在TYPO3 V9.5中可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接