Symfony登录通过链接到不同的防火墙



我的Symfony(5.4)应用程序中有两个防火墙。

我想要的是为另一个防火墙创建一个登录链接(其中配置了login_link),而登录到另一个防火墙.当前系统不允许(No SymfonyBundleSecurityBundleLoginLinkLoginLinkHandler found for this firewall. Did you forget to add a "login_link" key under your "admin_area" firewall?)

是否有办法告诉登录链接创建者为特定防火墙创建链接?(我没有在实现中看到它,所以我真的不知道)。

更新2022-06-10从Symfony 6.1开始,只需像这样使用新的Autowire-Attribute:

public function myLoginLinkAction(
User $myUser,
#[Autowire(service: 'security.authenticator.login_link_handler.my_other_firewall')] LoginLinkHandlerInterface $myOtherFirewallLoginLinkHandler,
): Response
{
// …
$loginLinkDetails = $myOtherFirewallLoginLinkHandler->createLoginLink($myUser);
// …
}

旧Symfony版本:

解决方案是使用security.yaml中定义的别名为我的另一个防火墙注入具体的链接处理程序服务(我们想要为其构建登录链接的另一个防火墙命名为"my_other_firewall"):

services:
# define a concrete alias for the login link handler of the
# my_other_firewall firewall to avoid the FirewallAwareLoginLinkHandler
# that always uses the current request's firewall
SymfonyComponentSecurityHttpLoginLinkLoginLinkHandlerInterface $myOtherFirewallLoginLinkHandler: '@security.authenticator.login_link_handler.my_other_firewall'

然后,当我将LoginLinkHandlerInterface注入到我的登录链接构建控制器时,我使用定义的参数名称$myOtherFirewallLoginLinkHandler并获得注入的正确LoginLinkHandler,而不是仅存在的FirewallAwareLoginLinkHandler,以使用为当前请求的防火墙定义的LoginLinkHandler

这解决了文档化的方式使用具体实现的问题,当多个接口实现时。

相关内容

  • 没有找到相关文章

最新更新