2011-05-14 2 views
83

내 응용 프로그램에서 인증에 Devise를 사용하고 있습니다.Devise - 특정 사용자의 로그인을 어떻게 금지합니까?

특정 사용자의 로그인을 금지하려면 어떻게해야합니까? 사용자를 일종의 종류로 비활성화 하시겠습니까?

+36

이 유효한 질문 및 재개되어야한다 -. 영업 이익은 내가 특정 사용자를 금지 할 방법 "을 요구하고있다 로그인 "에서 [devise] (https://github.com/plataformatec/devise)를 사용하십시오. – Zabba

답변

118

에 관심이있을 수 있습니다 같은데 :

User 모델 is_active라는 열을 만듭니다.

그런 다음 User 모델에 아래의 코드를 추가합니다

class User < ActiveRecord::Base 
    #this method is called by devise to check for "active" state of the model 
    def active_for_authentication? 
    #remember to call the super 
    #then put our own check to determine "active" state using 
    #our own "is_active" column 
    super and self.is_active? 
    end 
end 

UPDATE 매트 허긴 스 노트로, 방법은 지금 active_for_authentication? (Documentation)

+0

감사합니다! 그것이 내가 필요한 것입니다. –

+17

'active_for_authentication?'대신 'active?'로 이름이 바뀐 것 같습니다. –

+0

감사합니다. –

0

인증이 아니라 인증을 원합니다. Devise는 단지 authetication을 수행합니다.
즉, devise는 사용자가 자신이 말하는 사람이라는 것을 알려줍니다.
사이트 사용을 금지하려면 다른 것이 필요합니다.

인증은 인기있는 주제와 함께 당신을 도울 수있는 보석의 전체 목록이있다 :
http://ruby-toolbox.com/categories/rails_authorization.html
이 골라 봐가.

+5

차이점을 알고 있습니다. 것은 특정 컨트롤러에 액세스하지 않고 사용자가 로그인하는 것을 금지하려고합니다. –

11

라고

에 열 추가 User 모델 : allowed_to_log_in.

그런 /app/models/user.rb이 추가 :

def active_for_authentication? 
    super and self.allowed_to_log_in? 
end 

을 사용자 정의 메시지를 사용자에게 통보하고 싶다면 여러분이이를 추가 할 수 있습니다

def inactive_message 
    "You are not allowed to log in." 
end 

나는 그것이 매우 중요하다 생각하기 때문에 Devise의 표준 메시지 :

"계정이 아직 활성화되지 않았습니다." 사용자와 진짜 이유에 대해 혼란

당신이 로그인에서 그들을 "금지"한 것입니다

+0

현재 사용자 가입을 위해 inactive_message "Your account is currently suspended"가 표시되는 사용자 정지 기능을 구현하고 있습니다. 새로운 계정 활성화 및 사용자 정지에 대해 다른 비활성 메시지를 사용할 수 있습니까? – Dercni

+0

http://kiprosh.com/blog/customizing-devise-authentication-to-disable-or-enable-user-authentication – Dercni

관련 문제