devise 메서드 user_signed_in?및 current_사용자의 이해가 깊어지면

2954 단어 RubyonRails6.0Ruby

개발 환경


Mac OS Catalina 10.15.7
ruby2.6계
rails6.0과

일의 발단


어느 날, 나는 직장을 옮기는 데 쓰이는 오리지널 응용 프로그램을 만들었다.
로그인하지 않은 사용자가 로컬에서 세부 페이지로 마이그레이션 요청을 하는 동안 다음과 같은 오류가 발생했습니다.

해결 방법


결론적으로 user_signed_in? && 에서 설명한 대로 해당 매개변수의 값을 수정합니다.
오류 코드
show.html.erb
<% if current_user.id == @post.user.id %>
  <div class = "btn-contents">
    <%= link_to '編集する', edit_post_path(@post.id), class: "edit-btn"%>
    <%= link_to '削除する', "#", class: "delete-btn"%>
  </div>
<% end %>
오류 해결 코드
show.html.erb
<% if user_signed_in? && current_user.id == @post.user.id %>
  <div class = "btn-contents">
    <%= link_to '編集する', edit_post_path(@post.id), class: "edit-btn"%>
    <%= link_to '削除する', "#", class: "delete-btn"%>
  </div>
<% end %>
정말 어안이 벙벙한 말이다.

원인


로그인하지 않은 사용자에 대한 조건을 잊어버렸기 때문에current_사용자 방법이 사용자의 요청에 로그인하지 않았을 때도 사용되었기 때문이다.
current_사용자는 현재 로그인한 사용자의 정보를 얻을 수 있는 방법이지만, 이러한 상황에서 로그인하지 않았는데도 로그인 정보를 얻으려고 시도합니다.
그래서 "current_user...로그인이 안 돼서 그런 정보가 없어요..."이런 느낌으로 rails 선생님한테 혼났어요.
따라서 우선 앞의 조건에서 user_signed_in?사용 방법을 통해 로그인하지 않으면false로 돌아갑니다.
이렇게 하면 로그인하지 않았을 때 뒤로 옮겨지지 않기 때문에 오류가 해결됩니다.(A&B의 기술, A의 조건이false이면 B의 조건을 참조하지 않음)

대책


나는 대책은 방법에 대한 이해를 멈추는 것이라고 생각한다.
잘못된 원인은 위에서 말한 바와 같지만 근본적인 원인은'항상 방법을 기억하고 이해하기 위해 사용하는 것 같다'는 것이다.
주의하겠습니다.

좋은 웹페이지 즐겨찾기