2014-02-21 72 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爲空。

我進入實體並修復了序列化的方式,所以現在它保留了我需要的列以使其工作。

相關問題