0

我目前正在开发一个扩展程序,以便在前端登录后为用户显示信息。用户必须接受它们(如条款和条件)。

现在我正在寻找一种良好且安全的注销机制:

  1. 用户登录信息页面后被重定向

    • 状态:FE 登录可用
  2. 用户阅读信息,可以点击“接受”和“退出”

    • 如果接受:重定向到用户起始页
    • 如果注销:使用“logintype=logout”进入登录页面

现在问题来了:

在第2步中,用户可以在浏览器中输入任何有效的URL,并且TYPO3已经有有效的FE登录(第1步)->页面显示没有接受。

第一个解决方案:始终在第 1 步注销,如果单击接受,请再次登录。但是我不知道自动登录的用户凭据,这可能吗?

第二种解决思路:添加一个cookie,并在TypoScript Template 中使用redirect to logout 设置条件。不是我最喜欢的解决方案,因为 cookie 太容易操作。而且我们总是遇到奇怪的 cookie 问题,因为一些用户正在共享他们的工作站。

第三个解决思路:如果设置重定向为注销,则向 fe_user 表添加一个标志。问题:我们已经存在性能问题。有没有不增加页面加载时间的解决方案?我想这个检查必须在每个页面加载时完成......

您对此有任何解决方案的想法吗?

  • 打字稿3 4.5
  • 扩展名是 ExtBase
  • 将代码添加到 fe_login 扩展是一个可能的选项,我们已经在那里进行了更改
4

3 回答 3

2

如果有人需要,这是我的解决方案代码:

1)在扩展中添加用户密钥 - 没有直接的 Cookie 访问:

$GLOBALS['TSFE']->fe_user->setKey('user', 'acceptFromExtension', 1);
$GLOBALS['TSFE']->storeSessionData();

2)如果接受,请删除密钥:

if accepted {
  $GLOBALS['TSFE']->fe_user->setKey('user', 'acceptFromExtension', 0);
  $GLOBALS['TSFE']->storeSessionData();
}

2) 使用 TypoScript 检查密钥 - 它存储在 fe_user|uc 中:

[globalVar = TSFE:fe_user|uc|acceptFromExtension> 0]
  page.config >
  page.config.additionalHeaders = Location: http://www.mydomain.com/index.php?id=111&logintype=logout
[END]

感谢 sankar-v !

于 2013-01-11T12:56:42.247 回答
1

我们不能使用会话吗?当用户单击接受时设置会话变量,然后使用如下打字条件:

[globalVar = TSFE:fe_user|sesData|accept > 0]
page.10.userFunc = tx_templavoila_pi1->main_page

[ELSE]
page.10 = TEXT
page.10.value = You are not allowed to visit this page
or
page.config >
page.config.additionalHeaders = Location: http://www.yourdomain.org/login.html
[END]
于 2013-01-11T10:53:13.510 回答
0

虽然您有自己的扩展程序,但您可以以编程方式logoff将用户重定向到其中,然后将浏览器重定向到任何其他页面($somePreparedUri可以在您的扩展程序中创建或从 TypoScript 获取 - 作为静态值 - 取决于您的需要)

if (!$accepted)
    $GLOBALS['TSFE']->fe_user->logoff(); 
    return $this->redirectToUri($somePreparedUri);   
)
于 2013-01-11T11:45:22.813 回答