Symfony2自定义身份验证:用户已记录但未经过身份验证

时间:2013-03-26 16:45:38

标签: web-services security authentication symfony symfony-2.1

我一直在使用Symfony 2.1开发自定义身份验证系统。在与Symfony进行了很多战斗后,我得到了一些有效但不完全的东西......

问题:登录后(通过表单),用户已登录但未经过身份验证。

上下文:由于用户必须通过HTML表单提交凭据,因此我必须创建一个扩展AbstractAuthenticationListener的侦听器。

问题:听众是否应该自动将令牌添加到SecurityContext?如果不是这种情况,我应该手动吗?

流程

  

用户通过HTML表单

提交其凭据      
    

侦听器拦截请求并运行 attemptAuthentication

         
      

监听器调用AuthenticationManager(实现AuthenticationProviderInterface)验证方法

             
        

AuthenticationManager调用UserProvider(实现UserProviderInterface)以从我的webservice检索用户的数据。

                 

UserProvider返回实现UserInterface

用户类       
             

AuthenticationManager创建一个实现TokenInterface的令牌

             

AuthenticationManager将令牌返回给侦听器。

    
         

侦听器的attemptAuthentication从AuthenticationManager的方法返回令牌:authenticate

  
     

用户已登录但未经过身份验证。

我没有显示代码示例以避免帖子过载。如果需要,我会编辑帖子。

1 个答案:

答案 0 :(得分:2)

我发现了我的错误......

登录后,AuthenticationSuccessHandler会将用户重定向到我想要的网址。此操作会触发UserProvider中的refreshUser。

此功能是硬编码的,测试用户与我登录的用户不同。一旦函数返回一个等于存储在令牌中的用户,问题就解决了。