Devise - Como proíbo certos usuários de fazer login?

105

Estou usando o Devise para autenticação em meu aplicativo.

Como proíbo certos usuários de entrar - meio que desabilitar um usuário?

Dimitar Vouldjeff
fonte
42
Esta é uma pergunta válida e deve ser reaberta - OP está perguntando "Como eu proíbo certos usuários de entrar" usando o devise .
Zabba

Respostas:

149

Faça isso deste modo:

Crie uma coluna chamada is_activepara o Usermodelo.

Em seguida, adicione o código abaixo ao Usermodelo:

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 )

Zabba
fonte
21
Parece que este foi renomeado para em active_for_authentication?vez de apenas active?.
Matt Huggins
1
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?.
fotanus
Nota importante: active_for_authentication?tem que ser um método público!
Mladen Jablanović
super and self.is_active?pode ser simplificado parasuper && is_active?
David
17

Adicionar uma coluna para o Usermodelo: 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.

Oyvkva
fonte
Estou implementando um recurso de suspensão de usuário que funciona, no entanto, a inactive_message "Sua conta está suspensa no momento" também é exibida para inscrições de usuários. Posso ter diferentes mensagens inativas para ativação de nova conta e suspensão de usuário?
Dercni
Obrigado pelo comentário inactive_message.
Chris Farmer
0

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.

x10
fonte
6
Eu sei a diferença. Acontece que quero proibir o usuário de fazer login, não acessar determinado controlador.
Dimitar Vouldjeff