Estou usando o Devise para autenticação em meu aplicativo.
Como proíbo certos usuários de entrar - meio que desabilitar um usuário?
Estou usando o Devise para autenticação em meu aplicativo.
Como proíbo certos usuários de entrar - meio que desabilitar um usuário?
Respostas:
Faça isso deste modo:
Crie uma coluna chamada is_active
para o User
modelo.
Em seguida, adicione o código abaixo ao User
modelo:
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
ATUALIZAR
Como Matt Huggins observa, o método agora é chamado active_for_authentication?
( Documentação )
active_for_authentication?
vez de apenas active?
.
the method is now called active_for_authentication?
significa que o nome do seu método deve ser em active_for_authentication?
vez de active?
.
active_for_authentication?
tem que ser um método público!
super and self.is_active?
pode ser simplificado parasuper && is_active?
Adicionar uma coluna para o User
modelo: allowed_to_log_in
.
Em seguida, adicione isso a /app/models/user.rb
:
def active_for_authentication?
super and self.allowed_to_log_in?
end
Se quiser informar o usuário com uma mensagem personalizada, você também pode adicionar:
def inactive_message
"You are not allowed to log in."
end
Acho que é muito importante porque a mensagem padrão do Devise diz:
"Sua conta Ainda não esta ativada."
Isso é confuso para os usuários e o verdadeiro motivo é que você os "proibiu" de fazer login.
Você deseja fazer autorização, não autenticação. No entanto, o Devise só faz autenticação.
Ou seja, inventar apenas informa que um usuário é quem diz ser.
Você precisa de algo mais para proibi-lo de usar o site.
Autorização é um tópico popular e há uma lista completa de joias que podem ajudá-lo com isso:
http://ruby-toolbox.com/categories/rails_authorization.html
Faça sua escolha.
Parece que você pode estar interessado em cancan