레일즈 3.2 응용 프로그램에 대한 인증으로 Devise를 사용하고 있습니다. 내 사용자 모델을 User라고하며 소프트 삭제를 구현하려고했습니다. 내가 자동으로 당신을 위해 일하는 acts_as_paranoid를 사용하여 이것을하려고합니다. 내가 비활성화 된 사용자가 계속 로그인하여 "비활성화 된"화면을 볼 수 있도록하려는 경우를 제외하고 모든 것이 예상대로 작동합니다 (다른 사용자는 더 이상 "삭제 된"사용자를 볼 수 없습니다). 그리고 계정을 다시 활성화 할 수있는 기회를 제공하십시오.devise의 authenticate 및 current_user 메서드를 소프트 삭제로 작동하도록 사용자 정의/편집 적으로 작동
문제는 Devise (Warden?)가 더 이상 삭제 된 사용자를 찾을 수 없다는 것입니다. Acts_as_paranoid를 사용하면 "with_deleted"범위를 사용하면 소프트 삭제 된 레코드에 액세스 할 수 있습니다. 정보 로그가, 내가 성공적으로 가지고있는 플래시 메시지가 나타납니다 때 입력 그래서 지금
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
where(conditions).with_deleted.first
end
내가 내 사용자 모델에이를 넣어 : 그래서 거기 방법의 일부를 얻을 수 있어요 로그인하고 사용자 모델의 "updated_at"열을 만지고 sign_in_count 등을 증가시킵니다. 그러나 인증 된 메소드가 false를 리턴하고 current_user 도우미 메소드가 nil을 리턴한다는 의미에서 실제로는 인증하지 않습니다. 그렇다면 이러한 최선의 전략은 무엇입니까? current_user 메소드를 어떻게 든 재정의하여 with_deleted 범위로 User 모델을 쿼리 할 수 있습니까? 나는 find_first_by_auth_conditions 메소드를 사용했을 때처럼 추가 된 조건과 같이 관리자에게 뭔가를해야합니까? 나는 이것을하는 방법을 이해할 수 없다. 어떤 도움을 주셔서 감사합니다!
또한 정상적으로 작동하면 모든 소프트 삭제 된 사용자를 영구적으로 삭제하거나 다시 활성화하는 유일한 "비활성화 된"페이지로 보내고 싶습니다. "authenticated : user do {} end"를 통해 라우팅을 수행하는 방법이 있습니까? 아니면 모든 요청에서 before_filter를 application_controller에두고 사용자를 확인해야합니까?
이 부분에 대한 응답 주셔서 감사합니다. 문제는 이것 (내가 아는 한 지금까지 "삭제 된"사용자와 함께 작동하도록 실제로 인증을 얻는 중임)이 루트 경로 만 'application # deactivated'또는 'application'으로 라우팅한다는 것입니다. #activate '.이렇게해도 경로에 상관없이 비활성화 된 사용자는이 동일한 페이지로 보내지지 않습니다. 즉, 비활성화 된 사용자가 root.com/any로 이동하면 여전히 비활성화 된 페이지를 보길 원하지만 이처럼 경로를 설정하면 그렇게 할 수 없습니다. 나는 여러 경로를 보호하려고하기 때문에 필터 전에는 아무런 방법이 없다고 생각합니다. – kindofgreat