我在symfony2中实现了一个登录系统,其中包括security.xml配置和一些自定义内容......
成功登录后,symfony会将用户发送到特定的控制器,在那里我写了几个代码来填充一些额外的数据到会话。到目前为止,我们从登录页面开始申请,工作正常。
但在某些情况下,当我们访问某些需要身份验证的页面时,symfony会强制我们登录页面。成功登录后,我们将直接转到该页面(我们来自哪里),而不是登陆页面。在这种情况下,我们在登录页面上编写的额外代码没有被执行,因此应用程序的行为不再符合预期。
我的问题是克服这个问题... symfony2中是否存在任何钩子/设置/功能,通过它我可以在所有成功登录时执行一组代码,而不管用户被重定向到哪个页面。
答案 0 :(得分:1)
大约瑟夫我目前在symfony 1.4项目中工作,也许您应该使用以下代码来检查用户是否经过身份验证,然后在此块中运行您的代码。
if ($user->isAuthenticated()) {
#Run your code in this block and then redirect the user.
$this->redirect('@your_page');
}
答案 1 :(得分:1)
您可以实施成功案件。
编写一个实现AuthenticationSuccessHandlerInterface
:
将其定义为服务(您可以注入其他服务,如doctine或安全上下文,在您的情况下为会话)
在安全配置中添加处理程序服务,如:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: login
check_path: login_check
success_handler: some.service.id
logout:
path: logout
target: /
检查this以获取完整示例,并检查所有symfony2安全配置选项的reference doc(您也可以配置failure_handler)。
希望这个帮助