如何在登录时在symfony2上为会话注入特定值?

时间:2014-10-16 05:32:46

标签: php symfony session authentication symfony-2.3

我在symfony2中实现了一个登录系统,其中包括security.xml配置和一些自定义内容......

成功登录后,symfony会将用户发送到特定的控制器,在那里我写了几个代码来填充一些额外的数据到会话。到目前为止,我们从登录页面开始申请,工作正常。

但在某些情况下,当我们访问某些需要身份验证的页面时,symfony会强制我们登录页面。成功登录后,我们将直接转到该页面(我们来自哪里),而不是登陆页面。在这种情况下,我们在登录页面上编写的额外代码没有被执行,因此应用程序的行为不再符合预期。

我的问题是克服这个问题... symfony2中是否存在任何钩子/设置/功能,通过它我可以在所有成功登录时执行一组代码,而不管用户被重定向到哪个页面。

2 个答案:

答案 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)

您可以实施成功案件。

  1. 编写一个实现AuthenticationSuccessHandlerInterface

  2. 的类
  3. 将其定义为服务(您可以注入其他服务,如doctine或安全上下文,在您的情况下为会话)

  4. 在安全配置中添加处理程序服务,如:

    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: /
    
  5. 检查this以获取完整示例,并检查所有symfony2安全配置选项的reference doc(您​​也可以配置failure_handler)。

    希望这个帮助