2014-02-21 75 views
0

我有一个名为CustomUserProvider的自定义用户提供程序,我用它来管理登录。我遇到的问题是,它不认证/登录用户 - 刷新页面并没有任何反应。Symfony2自定义用户提供程序不验证/登录

我甚至跟着它,看看它是否进入loadUserByUsername方法,它是。 $userData获得填充正确的用户,它应该返回它。为了更进一步,我甚至设置了一个自定义的身份验证器,以确保令牌得到正确生成 - 即使是这样,它不会记录它们 - 只是刷新页面,并且实际上没有发生任何事情。

这是loadUserByUsername的片段CustomUserProvider

public function loadUserByUsername($username) 
{    
     // query database and do the custom salt/password check 
     $userData = $this->em->createQuery(
      '....' 
     )->setParameter('username', $username) 
     ->getResult(); 

     if (count($userData) > 0) { 

      return $userData[0]; 
     } else { 
      throw new UsernameNotFoundException(
       sprintf('Username "%s" does not exist.', $username) 
      ); 
     } 

} 

这是我的security.yml文件:

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext   
     Project\Bundle\MainBundle\Entity\Accounts: sha512 

    providers: 
     chain_provider: 
      chain: 
       providers: [my_fos_facebook_provider, custom_provider] 
     my_fos_facebook_provider: 
      id: my.facebook.user 
     custom_provider: 
      id: custom_user_provider 

    firewalls: 
     secured_area: 
      pattern: ^/ 
      fos_facebook: 
       app_url: "http://apps.facebook.com/sendioso-dev/" 
       server_url: "http://www.website.com/facebookApp/" 
       login_path: _security_login 
       check_path: _security_check 
       default_target_path:/
       provider: my_fos_facebook_provider 
      form_login: 
       login_path: project_main_login 
       check_path: project_main_login_check 
       provider: custom_provider 
      logout: 
       path:  project_main_logout 
      anonymous: ~ 
      #simple_preauth: 
      # authenticator: custom_authenticator 

    access_control: 
     - { path: ^/account, roles: ROLE_USER } 

* UPDATE *

我被检查dev.log这想出了:

[2014-02-21 21:39:40] security.INFO: User "[email protected]" has been authenticated successfully [] [] 

所以它看起来像它的有点工作,但确实如此没有实际登录我 - 只刷新页面,就是这样。

*更新2 *

我做了一些更多的挖掘,并发现它传递一个帐户对象与所有NULL值,在CustomUserProvider调用refreshUser(UserInterface $user)时。

任何人都知道它为什么会这样做?

回答

0

我发现了这个问题。

当它正在序列化'Accounts'对象时,它不是持久化序列化中的数据。所以,无论何时它反序列化,它都使NULL为空。

我进入实体并修复了序列化的方式,所以现在它保留了我需要的列以使其工作。

相关问题