2011-12-02 57 views
4

我有一个symfony2应用程序,使用配置了FOSUserBundle的单个防火墙来处理后端用户持久性。这是奇妙的工作。Symfony2:FOSUserBundle - 单个防火墙,多个登录表单/入口点

但是,我想要有不止1个登录表单/页面。我需要防火墙使用的“标准”/登录页面,但我也希望在其他页面中嵌入表单以便于登录访问。

例如,在页面/ booking/require_login上,我尝试嵌入FOSUserBundle的登录表单模板,这很容易。我设置_target_path转发任何成功的尝试,很好地工作。但是,如果尝试登录失败,我会将其重定向回标准/登录表单,而不是保留在我的/ booking/require_login页面上以呈现适当的错误。我看到有一个failure_path参数,但这似乎是全局的东西,而不是您可以作为参数传递的东西,如_target_path

这感觉就像我可能推动一个hacky的方法比它可以去。

我不需要单独的防火墙,它只是使用相同的一组限制来访问相同登录的另一种方法。

任何人都可以提供任何指针干净(或简单!)的方法?

回答

2

您可以注入失败处理程序(实现AuthenticationFailureHandlerInterface),您可以在其中创建基于请求数据的重定向(例如,基于failure_path post参数重定向到url)。

而且它很容易注入,您只需在DIC配置中创建一个名为security.authentication.failure_handler的服务。

+0

非常感谢!我前一段时间发现了一种解决方法,但这似乎是一个更好的解决方案,我会试一试:) – Sirhara