2013-04-15 3 views
0

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 :

은 분명히 내가 거짓말 쟁이 야, 내가 그냥 트림 프록시의 응답을 차단 놓쳤다 고정 아니에요. 이것을 재시도하는 것은 여전히 ​​문제입니다. 사용자에게 키로 태그를 지정하고 로그 아웃시 키를 제거하여이를 수정합니다. 해킹이지만 문제를 해결해야합니다.

답변

0

"파괴"는 사용자가 아니라 세션을 파괴하는 것입니다. 그렇다면이 "파괴"작업에서 데이터베이스 작업을 기대하는 이유는 무엇입니까?

사용자가 로그인하면 그는 로그인 페이지 ("Session # new")에서 전자 메일과 암호를 채 웁니다.

"로그인"버튼을 누르면 요청이 "세션 # 생성"으로 전송됩니다. 로그인 정보가 올 바르면 세션이 설정되었습니다. 서버는 사용자 ID를 포함한 해시 인 세션 ID가 포함 된 쿠키를 보냅니다.

이후이 사용자의 모든 요청에 ​​대해 브라우저는이 쿠키와 함께 요청을 보냅니다. 서버는이 해시를 해독하고 데이터베이스에서 사용자 ID를로드합니다.

로그 아웃하려면 "로그 아웃"버튼을 누르면 "세션 # 파괴"요청에 "DELETE"요청을 보내면 서버는 브라우저에 해당 쿠키에서 키/아이디를 삭제하도록 요청합니다.

이제 세션이 삭제됩니다. 그 이후에 보내는 요청에는 유효한 사용자 정보가 포함되지 않으므로이 사용자는 로그인 사용자에 대한 보호 된 리소스에 더 이상 액세스 할 수 없습니다.

기본적으로 작동 방식입니다. 여기에서 세부 정보를 확인할 수 있습니다 : http://guides.rubyonrails.org/security.html

+0

"그렇다면이"파괴 "작업에서 왜 데이터베이스 작업을 기대합니까?" 클라이언트 주위의 보안 모델을 기반으로하기 때문에 엄청난 결함이 있습니다. 로그 아웃 버튼을 누르면 워든에게 이전 자격증 명으로 이루어진 요청이 모두 유효하지 않음을 알려야합니다. 또한 세션을 다시 설정 한 후에 다시 클릭 할 수 있고 시스템에 남아 있기 때문에 세션이 완전히 삭제되지 않은 것입니다. – Andrew

+0

@Andrew, 나는 당신이 그것을 필요로하지 않는다는 것을 의미했습니다. –

+0

브라우저에서 쿠키에서 키/아이디를 삭제하라는 메시지가 나오는 것을 이해합니다. 이해가 안되는 부분은 보안 시스템에 의존하고있는 이유입니다. – Andrew

관련 문제