我一直在使用Symfony 2.1开发自定义身份验证系统。在与Symfony进行了很多战斗后,我得到了一些有效但不完全的东西......
问题:登录后(通过表单),用户已登录但未经过身份验证。
上下文:由于用户必须通过HTML表单提交凭据,因此我必须创建一个扩展AbstractAuthenticationListener
的侦听器。
问题:听众是否应该自动将令牌添加到SecurityContext
?如果不是这种情况,我应该手动吗?
流程:
用户通过HTML表单
提交其凭据侦听器拦截请求并运行 attemptAuthentication
监听器调用AuthenticationManager(实现AuthenticationProviderInterface)验证方法
AuthenticationManager调用UserProvider(实现UserProviderInterface)以从我的webservice检索用户的数据。
UserProvider返回实现UserInterface
的用户类AuthenticationManager创建一个实现TokenInterface的令牌。
AuthenticationManager将令牌返回给侦听器。
侦听器的attemptAuthentication从AuthenticationManager的方法返回令牌:authenticate
用户已登录但未经过身份验证。
我没有显示代码示例以避免帖子过载。如果需要,我会编辑帖子。
答案 0 :(得分:2)
我发现了我的错误......
登录后,AuthenticationSuccessHandler
会将用户重定向到我想要的网址。此操作会触发UserProvider中的refreshUser。
此功能是硬编码的,测试用户与我登录的用户不同。一旦函数返回一个等于存储在令牌中的用户,问题就解决了。