2011-11-17 2 views
3

을 사용하는 Rails 3.0 프로젝트를 가지고 있으며 모든 성공적인 로그인과 실패한 시도마다 DB에 등록하도록 요청 받았습니다. 유증 문서에서 Devits : 로그인 시도 등록

은 내가 FailureApp을 연장 할 거라고 생각하지만 예는 모든 모델을 사용하여 사용자를 리디렉션하고 있지 않습니다. 유래에서 그냥 this question을 찾았지만

을 장려하지 않은, 답이 남아

나는이 방법의 올바른 해요 또는 일부가 존재하는 경우이 방법을 수행 할 수 없거나 또는 사람이 말해 줄 수 더 쉬운 대안 나는 놓치고있다?

감사합니다 (난 그냥 다이빙 전에 작은 지침을 찾고, 어떤 코드가 아직 없다 알고있다).

답변

3

더티 작업을 수행하기 위해 Devise :: SessionsController를 수정하는 것이 트릭을 수행합니다.

은 간단하게 복사하는에 파일의 앱/컨트롤러/궁리/sessions_controller.rb는 사용자가 성공적으로 로그인 그는 그 의지 로그인에 실패 어디 어디, 단지 몇 가지 코드를 추가하는 것이 수행하면

네가 원하는 걸해라.

아마도 로그인 기록 추적을위한 새로운 모델을 만들고 싶을 것입니다.

+0

감사합니다. 실패한 attemp를 차단하는 방법을 찾는 것이 까다 롭지 만 작동하는 것 같습니다. – madth3

+0

나는 올바른 방향으로 당신을 가리킬 수있어서 기뻐. – fivetwentysix

4

시간을 조금만 들여서 다른 사람이 유용하다고 생각한 것 같습니다.

devise 컨트롤러의 create 작업은 제공된 매개 변수로 사용자를 인증하려고 시도하는 warden.authenticate!을 호출합니다. 인증에 실패하면 authenticate!은 장치 실패 응용 프로그램을 호출 한 다음 SessionsController#new 작업을 실행합니다. 인증에 실패하면 create 작업에 대한 모든 필터가 실행되지 않습니다.

따라서 의 내용을 확인하고 적절한 조치를 취하는 new 작업 후에 필터를 추가하는 것이 해결책입니다.

def instrument_failed_login 
    instrument "failed_login.staff" if failed_login? 
end 

def failed_login? 
    (options = env["warden.options"]) && options[:action] == "unauthenticated" 
end 
+0

Thanks @Matt; 이것은 유용했다. 실패한 로그인 로깅을 로컬로 구현하려면 여기의 지침을 따르십시오. 또한,이 답변의 단계를 문서화 : http://stackoverflow.com/a/12877182/429758 –

3

대안 및 고안 인증 주위 로깅을 더 추가 유지 보수 방법은 초기화에 Warden Callbacks을 사용하는 것이다. 이는 Warden API를 사용하고 복사/붙여 넣기 컨트롤러 코드와 관련되지 않기 때문에 바람직합니다.

Warden::Manager.before_failure do |env, opts| 
    logger.error("opts[:scope] authentication failure: #{opts[:message]}") 
end 

당신은 Warden::Manager#after_authenticationWarden::Manager#before_logout와 동일한 기능을 수행 할 수 있습니다.