我正在开发一个Typo3扩展,我想连接前端用户的注销操作。我寻找了一个适当的指南/教程,并得到了一个粗略的想法,我们如何才能做到这一点。我尝试了两种方法:
( 1) 使用Logout_confirmed Hook,但不起作用。也许我遗漏了什么。我所做的是..。我在ext_localconf.php中提到了下面一行
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['felogin']['logout_confirmed'] = Vendor/Ext_key/Hooks/Logout::class.'->checklogout'并在给定路径Vendor/Ext_key/Hooks/Logout::class.'->checklogout'...上创建了一个类。但是,当用户点击注销时,流永远不会到达checklogout()方法。有人能说出我错过了什么或者做错了什么吗。
2)我尝试通过检查直接在控制器操作中拦截注销请求。
if ($_REQUEST['logintype'] == 'logout')我可以拦截这个请求,但是在我在Controller中拦截它之前,用户会被注销,并且它的数据被从会话中清除。当用户点击注销时,我必须为每个用户设置一些值,所以我想在用户点击注销和他的会话被清除之前连接起来。这样我就可以访问用户名并相应地为该用户设置值。
发布于 2022-10-12 09:09:12
在方法TYPO3\CMS\Core\Authentication\AbstractUserAuthentication中使用logoff()类中的一个钩子
在ext_localconf.php扩展中注册钩子
$GLOBALS['TYPO3_CONF_VARS']
['SC_OPTIONS']
['t3lib/class.t3lib_userauth.php']
['logoff_pre_processing']
[] = \Vendor\Extension\Hooks\FrontendLogoutHook::class . '->checklogout';添加类Vendor\Extension\Hooks\FrontendLogoutHook
class FrontendLogoutHook
{
public function checklogout(array $ref, $userAuth)
{
$userId = $userAuth->getSession()->getUserId();
if (
$userAuth instanceof \TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication
&& $userAuth->getLoginFormData()['status'] == 'logout'
&& $userId
) {
// ... do stuff
}
}
}上面的例子使用钩子logoff_pre_processing,它是在注销发生之前调用的,但是在注销(logoff_post_processing)之后也有一个钩子。
确保在将钩子添加到TYPO3后删除整个ext_localconf.php缓存!
https://stackoverflow.com/questions/61036724
复制相似问题