将动态变量添加到login_path和check_path

时间:2015-07-23 04:39:01

标签: symfony

就我而言,当用户登录我们的系统时,我们必须弄清楚他/她来自哪个来源。我们必须在login_path,failure_path。

中添加一个动态变量

我搜索了很多,但没有找到有用的答案,谢谢。

2 个答案:

答案 0 :(得分:0)

实现此目的的最简单方法是创建两个类,然后将它们作为security.yml中的处理程序服务引用。

首先,请查看Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandlerSymfony\Component\Security\Http\Authentication\DefaultAuthenticationFailureHandler。这些是在身份验证成功或失败时调用的类,并从security.yml配置传递相关选项。

创建自己的类并从这些默认值扩展,用您自己的业务逻辑(即动态变量)覆盖onAuthenticationSuccessonAuthenticationFailure方法。然后将它们设置为服务:

my.authentication.success_handler:
    class: My\Authentication\SuccessHandler
    arguments: [ "1", "2", "3" ]

my.authentication.failure_handler:
    class: My\Authentication\FailureHandler
    arguments: [ "4", "5", "6" ]

然后在security.yml:

security:
    firewalls:
        my_firewall:
            form_login:
                success_handler: my.authentication.success_handler
                failure_handler: my.authentication.failure_handler

然后在您登录时,将调用相关的onAuthenticationX方法。您可能希望返回一个重定向响应,如默认值,但添加了动态变量。

如果您想要一种简单的方法来维护/检索默认处理程序中的选项,我建议您从Symfony Cookbook中查看Service Decoration

答案 1 :(得分:0)

为了帮助他人,我列出了我的问题。

  1. 无需在防火墙路径中添加变量,它支持路由名称 使用变量,symfony将从url路径获取所有变量,并将它们填入所有防火墙路径。

  2. 将全局变量添加到所有路由。 symfony中有一个示例说明如何向所有路由添加额外的全局变量。结帐此课程Symfony\Component\HttpKernel\EventListener\LocaleListener