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.
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
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