2012-09-26 6 views
1

안녕하세요, 저는 소금 필드가없는 md5의 비밀번호로 Symfony2 및 데이터베이스 테이블로 로그인을 시도하고 있습니다. 사용자가 많아서 변경할 수 없습니다.md5 비밀번호로 symfony2 로그인

잘못된 이메일이있는 양식을 보내면 로그인이 정상적으로 작동하는 것 같습니다. 메시지에 "잘못된 자격증 명"이 바로 표시됩니다. 그러나 좋은 이메일을 보내면 "표시된 비밀번호가 잘못되었습니다."라고 표시됩니다.

은 어떤 문제가 있습니까?

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 시스템으로 마이그레이션하여 100,000 명이 넘는 사용자를 확보했으며, 새로운 시스템에 처음 로그인 한 후 사용자를 위해 비밀번호를 강제로 업데이트하기 때문에 가능한 한 빨리 MD5를 제거 할 수있었습니다. MD5가 나쁘다. –

+0

참. BTW, 내 [복어 암호 인코더 번들] (https://github.com/elnur/ElnurBlowfishPasswordEncoderBundle)을 확인하십시오. –

+0

나는 진짜 비밀번호를 가지고 있지 않기 때문에. 나는 단지 MD5 해시를 가지고있다. – David

답변

1

토마스을 기록했다.

마지막으로 나는 다른 암호 기능 및 소금 분야를 가진 데이타베이스에서 모든 암호를 재생성하는 것을 결정한다. 모든 사용자에게 암호를 변경할 수있는 링크가 포함 된 전자 메일을 보내 드리겠습니다.

3

변경 algorithm: sha1에 :

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/로그인 경로 없음 소금,

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

이 Usuari 엔티티의 후 UserInterface를 구현 :

나는 방화벽을 config (설정) algorithm: md5.

+0

죄송합니다. 내 마음이 나를 배신했습니다. 나는 md5가 작동하지 않아서 문제를 해결했다. – David

+0

당신이 로그인하려고 시도하는 패스워드를'md5()'하고 데이터베이스의 패스워드와 같은지 확인해 보라. –

2

비슷한 상황이었습니다. 내가 한 것은 별도의 인코더를 만들어 레거시 사용자가 이전 알고리즘을 사용하여 로그인 할 수 있고 새로운 사용자가 심포니의 기본 인코더를 사용하여보다 안전한 암호를 얻을 수 있도록하는 것입니다.

나는이 솔루션은 좋은 작품을 보이지만 더 복잡하다, 매우 광범위한 대답 here

관련 문제