valid_password를 고안하는 데 이상한 문제가 있습니까?
지난 2 시간 동안 나는 로그인 할 수없는 이상한 문제를 devise에서 디버깅하려고 노력했습니다.
내가 언급하는 내용은 다음과 같습니다.
password
=> 'vinodsobale'
password == 'vinodsobale'
=> true
resource.valid_password?(password)
=> false
resource.valid_password?('vinodsobale')
=> true
스크린 샷도 첨부 :
참고 : devise 내부에서 디버거를 활성화 했으므로 위 코드는 내부 코드를 고안했습니다.
나에게 그것은 Devise.secure_compare
.
이 문제는 2.2.2 에서 수정 된 Ruby 2.2.0의 알려진 문자열 손상 버그로 인해 발생합니다 .
버그 보고서에 설명 된대로 BCrypt가 C 확장에서 특정 문자열 생성 API를 호출 할 때 손상이 발생했습니다.이 API는 Devise v3.3.0 ::BCrypt::Engine.hash_secret
이 Devise::Models::DatabaseAuthenticatable#valid_password?
메서드 에서 호출 하여 트리거되었습니다 . 이 버그에 대한 Devise 관련 해결 방법 이 v3.5.0에 게시되었습니다.
해결책은 다음 중 하나입니다.
- Ruby를로 다운 그레이드
< 2.2.0
하거나로 업그레이드하십시오>= 2.2.2
. - Devise를
>= 3.5.0
.
어때
resource.valid_password?(password.to_s)
도움이되기를 바랍니다.
Devise DatabaseAuthenticatable#valid_password?
는 Encryptor::compare
2 개의 객체, 현재 저장된 비밀번호와 비교하려는 새 비밀번호를 취하는 메소드를 사용하고 있습니다.이 메소드에는 중간에있는 두 번째 매개 변수를 수정하여 대신 객체를 수정하는 부작용이 있다고 생각합니다. 한 번은 두 번 수정되어 잘못된 결과가 발생하므로 중복 된 암호 개체를 전달하면 작동 할 수 있습니다. 사용해 볼 수있어?valid_password? password.dup
원본 소스와 본체 간의 인코딩 문제 일 수 있습니다. 를 실행 password.codepoints
하면 실제 인코딩을 볼 수 있습니다. 실행 .codepoints
원시 '암호'문자열은 반환해야합니다 [112, 97, 115, 115, 119, 111, 114, 100]
.
참고 URL : https://stackoverflow.com/questions/34136044/weird-issue-with-devise-valid-password
'Programing' 카테고리의 다른 글
유휴 사용자를 기반으로 Angularjs로 자동 로그 아웃 (0) | 2020.10.14 |
---|---|
FLOW3 작업 매개 변수 및 객체 배열 (0) | 2020.10.13 |
appcompat-v7 v21.0.0은 Android v4.2.2를 사용하는 삼성 기기에서 충돌을 일으킴 (0) | 2020.10.13 |
.net Core 2.0-대상 프레임 워크 .netCore 2.0 대신 .NetFramework 4.6.1을 사용하여 패키지가 복원되었습니다. (0) | 2020.10.13 |
이동할 때 컴퓨터 간 git 저장소 동기화? (0) | 2020.10.13 |