web-dev-qa-db-fra.com

Vérifiez si l'utilisateur est actif avant de permettre à l'utilisateur de se connecter avec Devise (rails)

J'utilise le congé et j'ai créé un champ utilisateur appelé: actif qui est vrai ou faux. Je dois rendre manuellement l'utilisateur actif (true) avant que l'utilisateur ne soit autorisé à se connecter. Au moins c'est l'intention. J'ai essayé ça ...

class SessionsController < Devise::SessionsController
  # POST /resource/sign_in
  def create
    "resource/signin CREATE"
    self.resource = warden.authenticate!(auth_options)
    unless resource.active?
      sign_out
      redirect_to :sorry_not_active_url
      return
    end
    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)
    respond_with resource, :location => after_sign_in_path_for(resource)
  end  
end

Cependant, cela n'atteint pas tous les endroits où un utilisateur peut se connecter, par exemple, lorsqu'un utilisateur modifie son mot de passe, le site les enregistre automatiquement automatiquement après. Toutefois, si l'utilisateur n'est pas actif, je ne veux pas qu'ils soient autorisés à vous connecter, mais plutôt à être redirigés vers un désolé_not_active_url.

Quel serait le meilleur moyen d'empêcher l'utilisateur de se connecter si l'utilisateur n'est pas actif?

Merci.

36
user2012677

Ajoutez ces deux méthodes à votre modèle utilisateur, Devise devrait les choisir automatiquement - vous ne devez pas nécessiter d'étendre Devise::SessionsController

def active_for_authentication?
  super && self.your_method_for_checking_active # i.e. super && self.is_active
end

def inactive_message
  "Sorry, this account has been deactivated."
end
86
house9

Devise (si vous avez le devise 3.2+) Support maintenant block Paramètre dans (session) Créer

# assuming this is your session controller

class SessionsController < Devise::SessionsController

def create
  super do |resource|
     unless resource.active?
      sign_out
      # you can set flash message as well.
      redirect_to :sorry_not_active_url
      return
    end
  end
end
6
Viren