Rails의 검증 설정이 저를 매혹시키면...

3315 단어 검증RubyRails
안녕하십니까
하와이 남자야, 안락해!
오늘 제품 조합을 만드는 과정에서 모델 검증에 푹 빠진 이야기를 하고 싶습니다!!
어쩌면 내일은 내 몸일지도 몰라...?

결론


사용자 모델 암호 검증
on: :create
사용하세요!

빠져들 때의 상황


아, 아니, 이게 무슨 일이야...?
이렇게 될 것 같아서 순서대로 설명합니다.
우선 그룹에서 사용자가 회원으로 가입하면 Rails의 Gemdevise으로 전용 홈페이지나 입소문 투고를 할 수 있는 기능을 만들었다.
이러한 기능 중 내 페이지에서 진행된 "자신의 사용자 정보 변경 기능 페이지"에서 이벤트가 발생했습니다...

무슨 일이야?


사용자 정보의 변경 페이지는 사용자 이름과 아이콘 이미지 등을 변경할 수 있는 페이지이지만 devise 을 사용하면 변경할 때마다 비밀번호를 입력해야 한다.
다만, "조금만 변경하면 비밀번호를 입력할 때마다 귀찮아요..."이런 사람을 위해 devise 비밀번호를 입력하지 않아도 되는 방법을 준비했다.
registrations_controller.rb
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
※ 이 외에도 검증이 기술되었으나 암호만 추출되었습니다.
그러면 사용자 정보를 안전하게 업데이트할 수 있습니다!
기쁘고 축하할 만하다

마지막


사용자 기능과 비밀번호 검증은 모두 비교적 많은 응용 프로그램이 필요로 하는 기능이라고 생각합니다. 같은 일이 있으면 참고하세요!
이 일에 관하여 여러분의 많은 지도와 건의를 바랍니다. 여러분의 평론을 기대합니다!!

좋은 웹페이지 즐겨찾기