2010-02-20 4 views
5

암호를 저장하려는 데이터베이스 필드가 있습니다. 내 모델의 before_create 필터에서 암호화 기능을 호출하고 일반 텍스트를 암호화 된 텍스트로 저장합니다.before_update 필터에서 필드의 값이 변경되었는지 확인하십시오.

before_update를 암호화에도 사용하고 싶지만 값이 변경된 경우에만 사용하고 싶습니다. 필드 값이 변경되었는지 확인하기위한 조건을 작성하려면 어떻게해야합니까? 필드 이름을 호출하면

답변

4

일반적으로 양식에 표시 할 입력란을 사용하여 모델에 암호를 저장하지 않으므로 문자를 unless password.blank?으로 업데이트하고 입력란에 "hashed_password"라는 실제 암호가 있어야합니다. 양식에 노출시키지 마십시오.

암호화 된 비밀번호를 attr_protected으로 추가 보호하기 위해 Ben (아래 참조)에게 감사의 말을 전하여 양식에서 직접 액세스하거나 업데이트 할 수 없습니다. +1

+0

@xaver 해시 된 속성 필드를 보호하여 양식을 통한 대량 업데이트 작업으로 쓸 수 없도록해야합니다. – hurikhan77

+2

attr_protected를 사용하여 설명 된 hurikhan77을 사용할 수 있습니다. – Ben

24

다음

object.name_changed? 

는 true를 돌려줍니다.

+0

항상 true를 반환하지 않습니까? 레일스는 업데이트 된 일반 텍스트 비밀번호와 데이터베이스의 암호화 된 기존 비밀번호를 비교할 것이며, 항상 다를 것입니다 (제 생각 엔). –

+0

@Farrel _changed를 사용합니까? 항상 완벽하고 완벽합니다. 그는 대답 해 주셔서 감사드립니다. 나는 기본적으로 오늘날의 모델을 가지고 있으며 그것은 요청자와 양수인에게 속한다. 배정 된 사람과 비슷한 일을 할 수있는 방법이 있는지 궁금합니다. – KevinM

+0

'object.changed'를 사용하여 변경된 모든 필드를 가진 배열을 얻을 수 있습니다. – Carpetsmoker

관련 문제