如果不接受TYPO3注销

时间:2013-01-11 09:40:54

标签: typo3 typoscript

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

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

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

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

    • 如果接受:重定向到用户首页
    • 如果注销:使用“logintype = logout”
    • 转到登录页面
  3. 现在问题在于:

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

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

    第二个解决方案的想法:添加一个cookie,并在TypoScript模板中创建一个重定向到注销的条件。不是我最喜欢的解决方案,因为cookie太容易操作。我们总是遇到奇怪的cookie问题,因为有些用户正在共享他们的工作站。

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

    你对此有什么解决方案吗?

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

3 个答案:

答案 0 :(得分: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!

答案 1 :(得分:1)

我们不能使用会话吗?当用户单击“接受”时设置会话变量,然后使用类似于:

的typoscript条件
[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]

答案 2 :(得分:0)

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

if (!$accepted)
    $GLOBALS['TSFE']->fe_user->logoff(); 
    return $this->redirectToUri($somePreparedUri);   
)