2012-09-26 138 views
1

你好我正在嘗試使用Symfony2和數據庫表進行登錄,密碼在md5中沒有鹽字段。我有很多用戶,我無法改變它。用md5密碼登錄Symfony2

當我發送帶有無效電子郵件的表單時,登錄似乎正常工作,它將返回右邊的「Bad credentials」消息。但是,當我發送帶有良好電子郵件的表單時,它會顯示「提供的密碼無效」。

怎麼了?

我配置防火牆:

security: 
    encoders: 
     Usuari\BackendBundle\Entity\Usuari: 
      algorithm: md5 

實施Usuari實體的UserInterface,無鹽

public function getUsername() 
    { 
     return $this->email; 
    } 

    public function getSalt() { 
     return ''; 
    } 

    public function getPassword() 
    { 
     return $this->clau; 
    } 

    public function getRoles() 
    { 
     return array('ROLE_ADMIN'); 
    } 

    public function eraseCredentials() { } 

    public function equals(UserInterface $user) 
    { 
     return $this->email === $user->getUsername(); 
    } 

和安全controlles在/登錄路由:

namespace Mes\BackendBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\Security\Core\SecurityContext; 


    class SecurityController extends Controller 
    { 
     public function loginAction() 
     { 
      $request = $this->getRequest(); 
      $session = $request->getSession(); 

      // get the login error if there is one 
      if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
       $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
      } else { 
       $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
      } 

      return $this->render('MeBackendBundle:Security:login.html.twig', array(
       // last username entered by the user 
       'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
       'error'   => $error, 
      )); 
     } 
    } 
    ?> 
+2

不要說你不能改變它。我們從遷移Drupal的一個網站,我們的Symfony2的系統,擁有超過10萬用戶,我們選擇以強制爲新系統上首次登錄後用戶密碼更新,所以我們可以得到儘快擺脫MD5的越好。 MD5是壞的。 –

+0

是的。順便說一句,看看我的[河豚密碼編碼器捆綁(https://github.com/elnur/ElnurBlowfishPasswordEncoderBundle)。 –

+0

因爲我沒有用戶的真實密碼。我只有md5散列。 – David

回答

1

托馬斯,這個方案似乎工作正常,但它是更爲複雜的。

最後我決定用其他編碼函數和salt字段從數據庫重新生成所有密碼。我會發郵件給所有用戶提供一個鏈接,讓這些更改密碼

3

變化algorithm: sha1algorithm: md5

+0

抱歉,我的大腦背叛了我。我糾正問題,有MD5不起作用 – David

+0

嘗試'MD5()'你試圖與登錄並檢查它是否等於在一個數據庫中的密碼。 –

2

我處於類似的情況。我所做的是我創建了獨立的編碼器,以便傳統用戶可以使用舊算法登錄,並且新用戶使用symfony的默認編碼器獲得更安全的密碼。

我貼一個非常廣泛的答案here