Devise – Comment interdire à certains utilisateurs de se connecter?

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

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

Fais-le comme ça:

Créez une colonne appelée is_active pour le modèle d’ 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 

METTRE À JOUR

Comme le note Matt Huggins, la méthode s'appelle maintenant active_for_authentication? ( Documentation )

Ajoutez une colonne au modèle User : allowed_to_log_in .

Puis ajoutez 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’append:

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

Je pense que c’est très important car le message standard de Devise dit:

“Votre compte n’est pas encore activé.”

Cela est déroutant pour les utilisateurs et la vraie raison est que vous les avez “banni” de votre connexion.

Vous voulez faire une autorisation, pas une authentification. Devise ne fait que l’authetication, cependant.
C’est-à-dire que seul un utilisateur est ce qu’il dit être.
Vous avez besoin d’autre chose pour lui interdire d’utiliser le site.

L’autorisation est un sujet populaire et il existe toute une liste de gemmes qui peuvent vous aider:
http://ruby-toolbox.com/categories/rails_authorization.html
Faites votre choix.