我目前正在开发一个扩展程序,用于在前端登录后显示用户的信息。用户必须接受它们(如条款和条件)。
现在我正在寻找一个良好而安全的注销机制:
用户登录信息页后会重定向
用户阅读信息,可点击“接受”和“退出”
现在问题在于:
在步骤2中,用户可以在浏览器中输入任何有效的URL,并且TYPO3已经具有有效的FE登录(步骤1) - >页面显示不接受。
第一个解决方案:始终在步骤1注销,如果单击“接受”,则再次登录。但我不知道自动登录的用户凭据,这有可能吗?
第二个解决方案的想法:添加一个cookie,并在TypoScript模板中创建一个重定向到注销的条件。不是我最喜欢的解决方案,因为cookie太容易操作。我们总是遇到奇怪的cookie问题,因为有些用户正在共享他们的工作站。
第三种解决方案的想法:如果设置重定向到注销,则向fe_user表添加一个标志。问题:我们已经遇到了性能问题。有没有增加页面加载时间的解决方案?我想这个检查必须在每个页面加载时完成......
你对此有什么解决方案吗?
答案 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);
)