web-dev-qa-db-fra.com

Concevoir - Comment puis-je interdire à certains utilisateurs de se connecter?

J'utilise Devise pour l'authentification dans mon application.

Comment interdire à certains utilisateurs de se connecter - sorte de désactiver un utilisateur?

101

Fais-le comme ça:

Créez une colonne appelée is_active pour le modèle User.

Ajoutez ensuite le code ci-dessous au modèle 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

[~ # ~] mise à jour [~ # ~]

Comme le note Matt Huggins, la méthode est maintenant appelée active_for_authentication? ( Documentation )

136
Zabba

Ajoutez une colonne au modèle User: allowed_to_log_in.

Ajoutez ensuite ceci à /app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

Si vous souhaitez informer l'utilisateur d'un message personnalisé, vous pouvez également l'ajouter:

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

Je pense que c'est assez important parce que le message standard de Devise dit:

"Votre compte n'est pas encore activé."

C'est déroutant pour les utilisateurs et la vraie raison est que vous leur avez "interdit" de se connecter.

15
Oyvkva

Vous voulez faire une autorisation, pas une authentification. Devise ne fait que l'authentification, cependant.
C'est à dire. devise vous indique seulement qu'un utilisateur est ce qu'il prétend être.
Vous avez besoin d'autre chose pour lui interdire d'utiliser le site.

L'autorisation est un sujet populaire et il y a toute une liste de gemmes qui peuvent vous aider:
http://Ruby-toolbox.com/categories/Rails_authorization.html
Faites votre choix.

0
x10