2011-11-01 2 views
4

로그인 후/생성 후 장치를 연결하고자합니다. 이 일을 어떻게 하죠?레일즈는 on_login에 후크를 넣습니다.

기본적으로 나는 로그인 할 때마다 사용자 위치를 설정하고이를 수행하기 위해 종류의 로그인 후크가 필요합니다.

답변

4

Devise는 로그인 성공시 user.current_sign_in_at 타임 스탬프 값을 업데이트합니다. 따라서 사용자 모델에 before_save 필터를 추가하기 만하면됩니다. 해당 필터에서이 필드의 값이 변경되었는지 확인하고, 변경된 경우 사용자 위치를 설정하십시오.

BTW - "위치"가 무슨 뜻인지 잘 모르겠다면 - 당신이 IP 주소를 의미한다면, Devise는 이미 그 점포를 저장하고 있습니다.

+0

중요하지 https://github.com/hassox/warden/wiki/callbacks를 참조하십시오,하지만 난 모델 클래스 (사람에게 직접 페이지) 'controller' 형 로직을 혼합 염려 것입니다. 이것은 Model-View-Controller의 깔끔한 분리를 진흙 투성이로 만듭니다. –

+0

왜 내가 이것을 생각하지 않았는지 모르겠다! 지오 코더 (Geocoder)로 그들의 aprox 위치를 얻고 우리가 유지 관리하는 도시의 데이터베이스에서 가장 가까운 도시를 찾는 데 그들의 IP를 사용하고 있습니다. 이것은 완벽하게 작동합니다, 대단히 감사합니다. – Marc

+0

케빈 (Kevin) - "location"에 의해 그는 URL을 의미하지는 않았다. – cailinanne

0

다음은 devise 위키의 페이지입니다 : How To: Redirect to a specific page on successful sign in. resource는 의미, 위의 코드에서

응용 프로그램/컨트롤러/application_controller.rb

def after_sign_in_path_for(resource) 
    custom_location_for(resource) || welcome_path 
end 

: 요약

는, 추천 응용 프로그램 컨트롤러에 다음과 같은 방법을 추가하는 것입니다 구현 한 객체 (사용자, 계정 등)가 인증을 위해 작성합니다. (경로에 devise_for이있는 객체입니다.)

+0

이것은 실제로 등록 프로세스에서 문제를 일으키는 것입니다. 필자의 경우 등록 컨트롤러 -> 확인 전자 메일 -> 확인 컨트롤러를 누른 다음 sign_in_and_redirect에 직접 after_sign_in_path_for를 건너 뛰는 것 같습니다. 현지화 된 문제 일 수 있지만 모든 경우에 테스트 해보십시오.) – pdelanauze

8

Devise는 Warden의 after_authentication 후크를 사용할 수 있도록 Warden에 내장되어 있습니다. 이니셜 라이저의

넣고이를 :

Warden::Manager.after_authentication do |user,auth,opts| 
    # do something with user 
end 

원격 IP 어드레스 및 다른 정보를 요청 (즉 auth.request.remote_ip) auth.request에 저장된다.

관련 문제