2012-05-14 3 views
3

Devails에 Rails 3.2 응용 프로그램을 설치했습니다. 모든 것이 훌륭한 패스워드를 재설정 할 때를 제외하고 (경로 및 메소드가 내장되어 있음) Devise는 빈 암호를 허용합니다. 길이를 확인하고 적어도 하나의 문자가 있으면 확인과 일치하는지 여부를 확인합니다. 나는 사용자 계정에서 암호를 입력하지 않고도 자신의 프로필을 업데이트 할 수있는 설정을했지만 암호 재설정과 관련이 없다고 생각합니다.Devise는 암호 재설정 중에 빈 암호를 허용합니다.

도움을 주시면 감사하겠습니다.

devise.rb ->http://pastie.org/3911178

user.rb ->http://pastie.org/3911187

답변

7

올바른 방향으로 나를 가리켜 주셔서 감사합니다. 문제는 당신이 묘사 한 것에 기인합니다. 그러나 유효성 검사를 처리하거나 동일한 코드를 사용하는 경우 사용자는 로그인 한 후에도 계정을 업데이트 할 때 암호를 제공해야합니다.이를 해결하기 위해 유효성 검사에서 rest_password_token을 확인했습니다 :

def password_required? 
    # If resetting the password 
    return true if reset_password_token.present? && reset_password_period_valid? 

    # If the person already has a pass, only validate if they are updating pass 
    if !encrypted_password.blank? 
    password.present? || password_confirmation.present? 
    end 
end 

* 업데이트 암호 토큰이 만료되지 않도록이 기능을 업데이트했습니다.

1

당신은 핸들러의 암호 검증을 고안하도록해야 : https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb 또는 코드 유증가 검증에 사용하는 사용합니다. 코드의 문제는 사용자가 암호 (! encrypted_password.blank?) 및 기타 조건을 설정하지 않은 경우에만 유효성 검사를 수행한다는 것입니다. 암호를 복구 할 때 사용자는 이미 암호가 설정되어 있으므로 암호 업데이트에 대한 유효성 검사를 실행하지 않습니다.

관련 문제