rails devise 서명 출력 설정 오류

devise 신호 출력의 목표 설정을 바꾸는 중 오류가 발생한 원인
개시하다
안녕하세요.DMM WEBCAMP Advent Calendar 2021 담당 8일차@Hbk__17!
평소 청강생을 가르칠 때 자신의 불편한 곳에서'devise 사용 시 말소 조건이 엇갈려 오류를 고칠 수 없다'는 질문을 받는 청강생들이 종종 있었지만, 제대로 설명된 기사는 보이지 않았다이번 나의 보도에서 왜 이런 오류가 발생했는지에 관해서 나는 어떻게 수정하는 것이 비교적 좋은지 설명하고 싶다.잘못을 일찍 고치고 싶은 사람은 참조여기..
오류 정보
이번에 주로 해설을 진행하는 오류문, devise를 사용할 때 로그아웃을 설정할 때 발생하는 오류↓에 대해 해설을 진행하고 싶습니다!

잘못된 일역
그러면 cannot redirectto nil!나는 잘못된 문장의 일역부터 시작하고 싶다.
cannot,redirectto는 화면을 이동하는 방법입니다. 그리고 마지막nil에 대해 자주 잘못된 문장에서 보지만 비어있거나 아무것도 없을 때가 많습니다.
그러니까 이번 오류는 목표를 재정비하지 않았다는 거예요!이렇게 혼나는 거 알았어!
오류 원인 설명
그럼 잘못된 뜻을 이해했어도분명히 controller에 서명 출력 목적지를 설정했지만 cannot redirectto nil!그들이 욕을 먹는지 보자!
실제코드↓
class ApplicationController < ActionController::Base
    before_action :configure_permitted_parameters, if: :devise_controller?
    def after_sign_in_path_for(resource)
        case resource
        when Admin
            admin_items_path
        when EndUser
            mypage_customers_path
        end
    end

    def after_sign_out_path_for(resource)
        case resource
        when Admin
            admin_items_path
        when EndUser
            mypage_customers_path
        end
    end

    protected

    def configure_permitted_parameters
      devise_parameter_sanitizer.permit(:sign_up, keys: [:last_name, :first_name, :last_name_kana, :first_name_kana, :postal_code, :adress, :phone_number, :email])
    end

end
실제로 코드를 봤는데, 애프터.sign_out_path라는 설정이 있네요!설정은 있는데 왜 반응이 없지?실제로 오류를 제거할 때 가장 편리한 것은 디버깅 도구다.
이번에 서명을 마치면 리소스라는 파라미터를 받을 수 있습니다. 이 수치의 조건에 따라 차이가 나기 때문에 관리자와 회원이 서명 장소를 변경했습니다. 따라서 리소스의 값을 디버깅 도구로 사용해 내용을 확인하세요!
이번에는 디버깅 도구로 사용하고 싶어요gem 'pry-rails'!
def after_sign_out_path_for(resource)
    binding.pry
    case resource
    when Admin
      admin_items_path
    when EndUser
      mypage_customers_path
    end
end
위에서 말한 바와 같이case문에 binding.pry삽입하세요!
디버그 도구가 설치되어 있어도 리소스 내용을 실제로 보십시오.

디버그 도구로 Resource를 출력해 보십시오:enduser라는 값을 출력했습니다.
그래서 나는 왜 사인을 한 후에 순조롭게 진행되지 못할까 하는 의문이 생길 것이라고 생각한다.따라서 로그인한 상태에서 디버깅 도구로 내용을 볼 수 있습니다!

이렇게 하면 모델의 이름과 모델 안의 기록이 출력되었는지 확인할 수 있습니다!여기에 로그인할 때 리소스로 모델 이름과 내용을 받을 수 있고, 사인할 때 첨부된 모델 이름이 돌아왔다는 것을 알 수 있다.리소스로서 받아들인 것이 다르기 때문에 응용 컨트롤러가 기술한 조건이 순조롭지 않다는 것을 알 수 있다.
← 이것은 무엇입니까?
이번 사인 때 맡겼어요. 모델 이름과 일반 모델 이름은 뭐가 달라요?이런 의문이 있을 것 같아!실제로 모델의 이름은 일반 모델과 다르다.그럼 ← 이건 아무래도 상징으로 불리는 물건이야.기호란 모델 등을 정수로 관리하는 것을 말한다.외관상으로는 문자열이지만 루비의 뒷면은 정수로 관리됩니다.웃다 웃다
기호를 사용하는 이유로 메모리로서 가볍기 때문에 처리 속도가 빠르다.
여기.의 글은 기호에 대한 이해가 더욱 깊었으니 참고할 수 있습니다!
기호가 있는:end사용자는 모델과 달리 모델의 내용을 참조할 수 없습니다.따라서 상기 응용 컨트롤러는 모델에 대해 조건을 나누었기 때문에 어떠한 조건에도 적용되지 않으며 목적지를 다시 정하지 않았습니다!이렇게 혼났어요.
왜 기호의 값을 되돌려줍니까?
그럼 왜 로고가 있는 모델 이름이 사인을 하면 반납되는 거죠?
이번에는 설비의 설명서deviseDocument를 살펴보자.
devise document↓

이 캡처의 주석 부분에는 서명할 때 기호의 규격을 되돌려 주는 기술이 있다.
이번 잘못된 해결 방법
해설이 길어졌습니다. 다음은 오류를 어떻게 없애는지 해설합니다!
아까 해설에서 사인은 리소스 모델로 돌려주지만 사인할 때 모델 이름의 로고가 돌아온다.즉, 오류가 발생한 상태에서 코드의 내용은 리소스의 내용을 모델로 기술한 것이기 때문에 리소스의 내용을 상징으로 조건 차이를 기술하면 코드의 오류가 치유될 수 있다고 생각합니다!구체적으로 말하면
def after_sign_out_path_for(resource)
   case resource
   when :admin
         admin_items_path
   when :end_user
      mypage_customers_path
   end
end
이렇게 변경하면 Resource의 내용과 조건이 다른 것이 일치하기 때문에 상황에 따라 서명처를 잘못 변경하지 않을 수 있다고 생각합니다.
만약if분으로 쓰면 이렇게 될 것 같아!↓
def after_sign_out_path_for(resource)
   if resource == :admin
         admin_items_path
   elsif resource == :end_user
      mypage_customers_path
   end
end
최후
여기까지 rails의 devise 서명 아웃에 대한 해설을 해봤는데 어때요?
이 기사를 읽은 사람들의 이해를 조금 더 깊게 할 수 있다면 정말 좋겠다!
이번에 이 글을 써 보았는데, 나는 코드를 쓸 때의 자질구레한 문제들을 잘 배우고 싶다!
끝까지 읽어주셔서 감사합니다~!

좋은 웹페이지 즐겨찾기