我有一个Symfony 3.4项目(如果有帮助的话,使用FosUser),有多种登录类型(本地、Oauth2、ldap),所有的注销(最终)都是通过默认的注销方法从本地用户处理的。
然而,在SAML协议中,注销需要重定向到Idp(身份提供商,这里是Azure AD),接受成功响应并注销本地用户。
在我的在线搜索中,只有5.1 symfony(而不是3.4)https://symfony.com/blog/new-in-symfony-5-1-simpler-logout-customization的文档解释了如何在注销事件发生之前而不是之后触发一些代码(像注销侦听器或订阅者那样)。
Symfony 3.4项目如何在注销事件发生之前检查用户的登录类型是否为saml?如果是saml,我可以将他重定向到Idp(并返回到自定义路由)并继续该过程吗?
2条答案
按热度按时间ws51t4hk1#
多亏了@Jakumi注解,我才能在默认的LogoutListener之前运行一个监听器。首先,我必须在services.yaml中注册一个优先级高于7的监听器
这里我不能使用appHelper或Security来获取当前用户,因为这个监听器在Security/Http/Firewall之前运行。所以我停止事件传播设置新响应,将用户重定向到自定义注销路由器,然后在用户中执行验证逻辑。
我希望我能从一个挣扎着做同样事情的人那里省下几天时间。
i7uq4tfw2#
在Symfony4.4之后,将
GetResponseEvent
替换为RequestEvent