2011-02-20 4 views
1

나는 Devise를 인증에 사용하며 사용자를 관리 할 수있는 관리자 역할을 담당합니다.위젯 before_authenticate?

이 외에도 관리자는 사용자가 향후 로깅하지 못하도록 잠글 수 있습니다. 'is_locked?'라는 'User'모델 내부에 부울 필드를 만들었습니다. 관리자가 사용자를 잠그면이 부울 필드는 true로 설정됩니다. 이 정보를 바탕으로 사용자가 잠겨 있는지 여부를 알 수 있습니다.

사용자가 세션을 설정하기 전에 로그인하려고하면이 논리를 확인해야합니다. 나는이 논리를 어디에 추가 할 것인가에 대해 단서가 없다. 또는이 모든 사용자 지정 메서드 나 이벤트가 제공하므로 추가 할 수 있습니다.

답변

2

나는 당신이 authenticate_user!를 확인하고 싶었다 그래서 만약 당신이 컨트롤러에 before_filter의 스택 수 있다는 것을 발견했습니다 당신은 또한 사용할 수 있습니다 a before_filter (authenticate_user! 이후)로 잠긴 사용자를 확인하십시오. 당신이 잠금 해제 된 사용자 인 경우

#top of controller 
before_filter authenticate_user! 
before_filter user_active! 

#bottom of controller 
private 
def user_active! 
    unless current_user.locked? 
    return true 
    end 
    redirect_to root_url, :notice => "Your account is locked." 
    return false 
end 

이 당신에게 당신이 원하는 페이지를 제공합니다 : 사용자 모델은 부울 속성 locked이있는 경우, 당신은 단순히 이런 민간 컨트롤러 메서드 (또는 도우미를) 쓸 수 있습니다 사용자가 잠겨 있으면 오류 메시지와 함께 루트 페이지로 리디렉션됩니다. 답장을

1

당신은 User 모델 상에 active? 방법을 추가 할 수 있습니다

def active? 
    super && !self.is_locked? 
end 
+0

감사합니다. Devise가 사용하는 모든 방법은 어디에서 찾을 수 있습니까? 또한 적절한 오류 메시지를 제기하고 싶습니다. 어떻게 할 수 있습니까? – Deepak