我正在为 Symfony 2 创建一个身份验证提供程序,它允许用户使用名为 CAS 的单点登录协议(protocol)进行身份验证。 .
我的 认证监听器 延伸自 AbstractAuthenticationListener .配置参数之一是 check_path
,这是触发身份验证监听器对请求进行身份验证的路径/路由。
我需要check_path
当我构造到 CAS 服务器的 URL 时(因此 CAS 服务器知道将用户返回到哪里),这很容易,因为我的自定义 入口点在我的安全性 中构造类时,会将配置数组传递给它工厂 .
困难的部分是我还需要check_path
在监听器之外,例如在我的 内部进行身份验证期间身份验证提供者 类(class)。我需要它,因为当 CAS 服务器将用户发送回应用程序时,它会传递一个必须验证的“票证”参数。为了验证它,我向 CAS 服务器发送了一个 curl 请求,该请求必须包含票证以及原始的 check_path
。那是用过的。
在写这篇文章时,我意识到当我在身份验证提供程序中时,我可以获得页面请求的当前 URL(因为它是 check_path
无论如何都会触发它),但这似乎不对,我宁愿得到直接配置值来重新构造服务 URL。当我想使用 check_path
时,它也无济于事。其他地方,比如在构造一个到 CAS 服务器的注销 URL 时,它也需要 check_path
.
编辑: createAuthProvider
AbstractFactory
的方法传递了配置和容器,但我不能在这里修改我的任何服务,因为它们还不是容器的一部分。也许如果我有办法在加载我的服务并以某种方式访问监听器配置后添加编译器传递?
最佳答案
您可以将 check_path 作为参数传递给您的监听器吗?
如果它在您的配置或参数文件中定义,您可以将其传递给您的监听器,如下所示:
your_authentication_listener:
class: YourBundle\Listener\AuthenticationListener
arguments: ['%check_path%']
tags:
...
(如果我理解你正确的话。)
关于Symfony2 : How to get Authentication Listener config values into another service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25899072/