Devise를 사용하여 웹 사이트를 테스트하고 있는데, Devise Sign Out 후에 리디렉션을 가로 채고 "destroy"메소드가 호출되는 동안, 버튼을 클릭하고 시스템에 다시 로그인하십시오.Devits 로그 아웃이 가로 채고 있습니다.
좀 더 세부 정보 :
1) 나는 다음과 같은 옵션을 고안을 사용하고 있습니다 : database_authenticatable : 복구 : 추적 가능한 : validatable : 잠금 장치 : timeoutable : password_archivable : maximum_attempts => 4 , : unlock_strategy => : 없음. 또한, 나는 sign_out_all_scopes (true)에 대한 기본 설정을 사용합니다.
2) 서버에서 브라우저로 다시 오는 호출을 가로 채기 위해 버프 프록시를 사용하고 있습니다.
def destroy
Rails.logger.info "RESETTING SESSION"
reset_session
Rails.logger.info "DESTROYING DEVISE SESSION"
super
Rails.logger.info "DONE WITH DEVISE"
end
호출 그냥 나를 위해하는 로그, 또한 내가 함께하고 reset_session없이 시도 다음과 같이
3) 내 세션 컨트롤러 방법을 파괴입니다.
4) 사용자로 로그인 한 다음 로그 아웃 호출을 클릭하면 웹 서버에서 로그를보고 Destroy 메서드가 호출되지만 브라우저 호출을 가로 채게됩니다.
5) 뒤로 버튼을 클릭하면 사이트로 돌아갈 수 있으며 로그 아웃하지 않은 것처럼 탐색 할 수 있습니다.
나는 브라우저에서 워든의 로그 아웃을 호출 했음에도 불구하고 실제로 브라우저에서 쿠키가 삭제되지 않는 한 아무 것도하지 않습니다. 또한 좀 더 가까이서 보면 Devise 나 Warden이 로그 아웃시 데이터베이스에 아무 것도하지 않는 것으로 나타났습니다. 로그 아웃은 쿠키를 손상시키지 않고 어쨌든 효과가 없습니다.
저는 Rails에 비교적 익숙하고 Devise에 새로운 기능을 가지고 있습니다.
EDIT : 빌리 첸과 짧은 대화를 나누고 나니 아무 잘못도없는 것처럼 보입니다. 이것은 Devise/Warden이 작동하는 방식입니다.
로그 아웃하는 것이 실제로 사용자를 로그 아웃하는 사이트에서이 문제를 어떻게 해결할 수 있는지 궁금합니다. 로그인/로그 아웃시 업데이트되는 User 객체의 상태를 던지기는 쉽지만, 현재 디자인에서 옵션을 사용하는 옵션이없는 이유가 궁금합니다. (선택 사항 일지라도).
편집 2 :
문제가 해결되었습니다. 데없는 :에도 불구하고 기억에 사용자 모델에서 켜져, devise.rb 파일 "config.use_salt_as_remember_token = true"이 고정 문제를 제거했다. 모델이 기억할 수 없지만 적어도 문제가 해결되면 해당 구성을 사용해야하는 이유는 정확히 알 수 없습니다.
편집 3 :
은 분명히 내가 거짓말 쟁이 야, 내가 그냥 트림 프록시의 응답을 차단 놓쳤다 고정 아니에요. 이것을 재시도하는 것은 여전히 문제입니다. 사용자에게 키로 태그를 지정하고 로그 아웃시 키를 제거하여이를 수정합니다. 해킹이지만 문제를 해결해야합니다.
"그렇다면이"파괴 "작업에서 왜 데이터베이스 작업을 기대합니까?" 클라이언트 주위의 보안 모델을 기반으로하기 때문에 엄청난 결함이 있습니다. 로그 아웃 버튼을 누르면 워든에게 이전 자격증 명으로 이루어진 요청이 모두 유효하지 않음을 알려야합니다. 또한 세션을 다시 설정 한 후에 다시 클릭 할 수 있고 시스템에 남아 있기 때문에 세션이 완전히 삭제되지 않은 것입니다. – Andrew
@Andrew, 나는 당신이 그것을 필요로하지 않는다는 것을 의미했습니다. –
브라우저에서 쿠키에서 키/아이디를 삭제하라는 메시지가 나오는 것을 이해합니다. 이해가 안되는 부분은 보안 시스템에 의존하고있는 이유입니다. – Andrew