2017-04-22 1 views
2

사이트에 대해 "비밀번호 변경"기능을 설정하는 경우 보조 비밀번호 항목 ()을 사용하기 전에 비밀번호를 다시 입력해야합니다 ().Symfony 3에서 암호를 비교하는 방법 (Bcrypt hashes)?

입력 한 암호와 비교하여 사용자의 현재 암호 (은 Bcrypt을 사용하여 해시 됨)를 확인할 수 있어야합니다.

$currentPassword = $request->request->get('password'); 
$encoder = $this->container->get('security.password_encoder'); 
$encodedPassword = $encoder->encodePassword($user, $currentPassword); 

if($encodedPassword == $user->getPassword()) { // these don't ever match. 
    // ... 
} 

encodePassword(...)가 입력 된 암호의 다이제스트를 생성하지만, 저장된 암호 (평문이 같은이다)와 동일하지, 그래서 내 컨트롤러 액션에서

내가 가진 다른 소금이 사용되어서 불일치를 일으키고 있다고 생각합니다.

Bcrypt는 암호 다이제스트에 소금을 포함하므로 어디에도 저장하지 않습니다.

입력 한 일반 텍스트 비밀번호가 Symfony 3의 저장된 Bcrypt 다이제스트와 일치하는지 어떻게 확인할 수 있습니까?

FOSUserBundle을 사용하고 있지 않습니다.

답변

5

당신은 인코더 서비스의 isPasswordValid 방법을 사용하여 저장된 하나와 $currentPassword 비밀번호를 비교할 수 있습니다

$encoderService = $this->container->get('security.password_encoder')

를 다음 방법의 첫 번째 인수로 사용자 개체를 전달할 :

$match = $encoderService->isPasswordValid($userObject, $currentPassword)

비교가 일치하는 경우 true을 반환하거나 false otherwi를 반환합니다. se.

+0

환상적. 매우 감사합니다. 나는 어떻게 든 문서에서 그것을 놓쳤다. – 121c

+1

@Chris를 도와 드리겠습니다. 추신 : 때로는 클래스 메서드 (숏컷 단축키 사용)를 검사하여 미래에 유용하게 사용할 수 있습니다 :-) –

관련 문제