Rails의 검증 설정이 저를 매혹시키면...
하와이 남자야, 안락해!
오늘 제품 조합을 만드는 과정에서 모델 검증에 푹 빠진 이야기를 하고 싶습니다!!
어쩌면 내일은 내 몸일지도 몰라...?
결론
사용자 모델 암호 검증on: :create
사용하세요!
빠져들 때의 상황
아, 아니, 이게 무슨 일이야...?
이렇게 될 것 같아서 순서대로 설명합니다.
우선 그룹에서 사용자가 회원으로 가입하면 Rails의 Gemdevise
으로 전용 홈페이지나 입소문 투고를 할 수 있는 기능을 만들었다.
이러한 기능 중 내 페이지에서 진행된 "자신의 사용자 정보 변경 기능 페이지"에서 이벤트가 발생했습니다...
무슨 일이야?
사용자 정보의 변경 페이지는 사용자 이름과 아이콘 이미지 등을 변경할 수 있는 페이지이지만 devise
을 사용하면 변경할 때마다 비밀번호를 입력해야 한다.
다만, "조금만 변경하면 비밀번호를 입력할 때마다 귀찮아요..."이런 사람을 위해 devise
비밀번호를 입력하지 않아도 되는 방법을 준비했다.
registrations_controller.rbprotected
def update_resource(resource, params)
resource.update_without_password(params)
end
처음에 이 방법은 주석 출력이었기 때문에 주석 출력을 삭제하면 사용자 정보를 업데이트할 때 비밀번호를 입력하지 않아도 된다.
하지만 실제로 변경 내용을 입력한 후 更新ボタン
를 누르면...
"어...어, 왜!? 비밀번호를 입력해 달라는 요청을 받았어...!?"
물론 이런 상황에서 비밀번호와 확인용 비밀번호更新ボタン
를 입력하면 사용자 정보가 업데이트됩니다...
내가 원하는 건 이런 잘 모르는 기능이 아니야!!
그래서 여러 가지 조사를 거쳐 원인을 판명했다.
원인
어쩌면 너는 이미 알아차렸을지도 몰라...
네, 이번 사건의 원인은 Userモデルで設定したパスワードのバリデーション
!!
어떻게 된 일인지 말하자면, 이번에는 비밀번호로 검증되었다.presence: true(カラムが空だと登録されないオプション)
설정했지만 이것カラムが空だと登録できない
의 부분이 작용했어요...!!!
그러니까
사용자 모델 "사용자 정보 업데이트하세요~"
↓
사용자 모델 "devise의 컨트롤러는 비밀번호 설정이 필요 없어도 돼요~"
↓
사용자 모델 "어, 그런데 모델 검증은 비밀번호가 필요해..."
↓
사용자 모델 "네, 비밀번호를 입력하십시오."
이런 절차가 된 것 같아...왜?
해결 방법
원인을 알고 나면 간단해진다.
암호에 적용되는 인증을 사용자가 로그인할 때만 사용하도록 재설정하면 됩니다.
그래서 제가 처음에 보여드렸어요.on: :create # コントローラーのcreateアクションの時のみ動作する様にするオプション
필요한 거야!
이번에 제 코드로 쓰면...
user.rb with_options presence: true do
# ユーザー新規登録時のみバリデーションを適用する。
with_options on: :create do
validates :password
validates :password_confirmation
end
end
※ 이 외에도 검증이 기술되었으나 암호만 추출되었습니다.
그러면 사용자 정보를 안전하게 업데이트할 수 있습니다!
기쁘고 축하할 만하다
마지막
사용자 기능과 비밀번호 검증은 모두 비교적 많은 응용 프로그램이 필요로 하는 기능이라고 생각합니다. 같은 일이 있으면 참고하세요!
이 일에 관하여 여러분의 많은 지도와 건의를 바랍니다. 여러분의 평론을 기대합니다!!
Reference
이 문제에 관하여(Rails의 검증 설정이 저를 매혹시키면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yasunori_aloha/items/8f3583d3b581ea31c1f4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
on: :create
아, 아니, 이게 무슨 일이야...?
이렇게 될 것 같아서 순서대로 설명합니다.
우선 그룹에서 사용자가 회원으로 가입하면 Rails의 Gem
devise
으로 전용 홈페이지나 입소문 투고를 할 수 있는 기능을 만들었다.이러한 기능 중 내 페이지에서 진행된 "자신의 사용자 정보 변경 기능 페이지"에서 이벤트가 발생했습니다...
무슨 일이야?
사용자 정보의 변경 페이지는 사용자 이름과 아이콘 이미지 등을 변경할 수 있는 페이지이지만 devise
을 사용하면 변경할 때마다 비밀번호를 입력해야 한다.
다만, "조금만 변경하면 비밀번호를 입력할 때마다 귀찮아요..."이런 사람을 위해 devise
비밀번호를 입력하지 않아도 되는 방법을 준비했다.
registrations_controller.rbprotected
def update_resource(resource, params)
resource.update_without_password(params)
end
처음에 이 방법은 주석 출력이었기 때문에 주석 출력을 삭제하면 사용자 정보를 업데이트할 때 비밀번호를 입력하지 않아도 된다.
하지만 실제로 변경 내용을 입력한 후 更新ボタン
를 누르면...
"어...어, 왜!? 비밀번호를 입력해 달라는 요청을 받았어...!?"
물론 이런 상황에서 비밀번호와 확인용 비밀번호更新ボタン
를 입력하면 사용자 정보가 업데이트됩니다...
내가 원하는 건 이런 잘 모르는 기능이 아니야!!
그래서 여러 가지 조사를 거쳐 원인을 판명했다.
원인
어쩌면 너는 이미 알아차렸을지도 몰라...
네, 이번 사건의 원인은 Userモデルで設定したパスワードのバリデーション
!!
어떻게 된 일인지 말하자면, 이번에는 비밀번호로 검증되었다.presence: true(カラムが空だと登録されないオプション)
설정했지만 이것カラムが空だと登録できない
의 부분이 작용했어요...!!!
그러니까
사용자 모델 "사용자 정보 업데이트하세요~"
↓
사용자 모델 "devise의 컨트롤러는 비밀번호 설정이 필요 없어도 돼요~"
↓
사용자 모델 "어, 그런데 모델 검증은 비밀번호가 필요해..."
↓
사용자 모델 "네, 비밀번호를 입력하십시오."
이런 절차가 된 것 같아...왜?
해결 방법
원인을 알고 나면 간단해진다.
암호에 적용되는 인증을 사용자가 로그인할 때만 사용하도록 재설정하면 됩니다.
그래서 제가 처음에 보여드렸어요.on: :create # コントローラーのcreateアクションの時のみ動作する様にするオプション
필요한 거야!
이번에 제 코드로 쓰면...
user.rb with_options presence: true do
# ユーザー新規登録時のみバリデーションを適用する。
with_options on: :create do
validates :password
validates :password_confirmation
end
end
※ 이 외에도 검증이 기술되었으나 암호만 추출되었습니다.
그러면 사용자 정보를 안전하게 업데이트할 수 있습니다!
기쁘고 축하할 만하다
마지막
사용자 기능과 비밀번호 검증은 모두 비교적 많은 응용 프로그램이 필요로 하는 기능이라고 생각합니다. 같은 일이 있으면 참고하세요!
이 일에 관하여 여러분의 많은 지도와 건의를 바랍니다. 여러분의 평론을 기대합니다!!
Reference
이 문제에 관하여(Rails의 검증 설정이 저를 매혹시키면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yasunori_aloha/items/8f3583d3b581ea31c1f4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
protected
def update_resource(resource, params)
resource.update_without_password(params)
end
어쩌면 너는 이미 알아차렸을지도 몰라...
네, 이번 사건의 원인은
Userモデルで設定したパスワードのバリデーション
!!어떻게 된 일인지 말하자면, 이번에는 비밀번호로 검증되었다.
presence: true(カラムが空だと登録されないオプション)
설정했지만 이것カラムが空だと登録できない
의 부분이 작용했어요...!!!그러니까
사용자 모델 "사용자 정보 업데이트하세요~"
↓
사용자 모델 "devise의 컨트롤러는 비밀번호 설정이 필요 없어도 돼요~"
↓
사용자 모델 "어, 그런데 모델 검증은 비밀번호가 필요해..."
↓
사용자 모델 "네, 비밀번호를 입력하십시오."
이런 절차가 된 것 같아...왜?
해결 방법
원인을 알고 나면 간단해진다.
암호에 적용되는 인증을 사용자가 로그인할 때만 사용하도록 재설정하면 됩니다.
그래서 제가 처음에 보여드렸어요.on: :create # コントローラーのcreateアクションの時のみ動作する様にするオプション
필요한 거야!
이번에 제 코드로 쓰면...
user.rb with_options presence: true do
# ユーザー新規登録時のみバリデーションを適用する。
with_options on: :create do
validates :password
validates :password_confirmation
end
end
※ 이 외에도 검증이 기술되었으나 암호만 추출되었습니다.
그러면 사용자 정보를 안전하게 업데이트할 수 있습니다!
기쁘고 축하할 만하다
마지막
사용자 기능과 비밀번호 검증은 모두 비교적 많은 응용 프로그램이 필요로 하는 기능이라고 생각합니다. 같은 일이 있으면 참고하세요!
이 일에 관하여 여러분의 많은 지도와 건의를 바랍니다. 여러분의 평론을 기대합니다!!
Reference
이 문제에 관하여(Rails의 검증 설정이 저를 매혹시키면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yasunori_aloha/items/8f3583d3b581ea31c1f4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
on: :create # コントローラーのcreateアクションの時のみ動作する様にするオプション
with_options presence: true do
# ユーザー新規登録時のみバリデーションを適用する。
with_options on: :create do
validates :password
validates :password_confirmation
end
end
사용자 기능과 비밀번호 검증은 모두 비교적 많은 응용 프로그램이 필요로 하는 기능이라고 생각합니다. 같은 일이 있으면 참고하세요!
이 일에 관하여 여러분의 많은 지도와 건의를 바랍니다. 여러분의 평론을 기대합니다!!
Reference
이 문제에 관하여(Rails의 검증 설정이 저를 매혹시키면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yasunori_aloha/items/8f3583d3b581ea31c1f4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)