我在网上为我的配置寻找解决方案,但我找不到满足我需求的东西。 到目前为止,我已经整整工作了3天,我无法使其正常工作,我确信有几件事我不理解。
我正在2.1分支上开发我的symfony应用程序。
简而言之。我有一个Web服务,我想用它进行身份验证。
这是我想要实现的流程:
我不知道是否可以使用Symfony进行此操作,因为这个工作流程似乎不是更安全,但我看不到使用此Web服务的另一种方式。
要完成,我不需要拥有UserProvider,因为我的身份验证是在远程服务上进行的。但显然,Symfony组件需要用户提供商(不管它的类型)。
我提前感谢你
编辑:为了使其更简单,是否可以在UserProvider类(实现UserProviderInterface)中的loadUserByUsername()函数中传递更多的$ username变量?我需要让用户通过他/她的用户名来检索用户对象。
答案 0 :(得分:3)
AuthenticationProvider通常会调用UserProvider.loadUserByUsername。在您的情况下,没有必要调用它。您的身份验证方法可以负责创建用户并传回令牌。
经过身份验证的令牌最终会在会话中结束。
问题在于,默认情况下,当下一个请求进入时,系统将从会话中检索令牌/用户,然后调用UserProvider.refreshUser($ user),默认情况下,再次使用loadUserByUsername重新加载用户。
因此,您需要创建自己的用户提供程序,并让refreshUser返回相同的用户。您只需要一个loadUserByUsername来满足接口,但永远不应该调用它。
如果您确实希望定期从Web服务刷新用户,则需要添加自己的侦听器以从会话中加载令牌并覆盖默认行为。