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?


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 )


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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.