J'utilise devise pour l'authentification et j'ai des before_filters dans mon contrôleur d'application. Le problème que je vois, c'est que lorsque j'essaie de me déconnecter, le before_filter intercepte cela et me maintient sur la vue que j'ai configurée dans le before_filter. Existe-t-il un moyen pour moi de spécifier quels contrôleurs doivent être exclus du contrôleur d'application ou d'un autre fichier?
Vous pouvez qualifier un filtre avec :only
ou :except
.
before_filter :filter_name, :except => [:action1, :action2]
Ou si le filtre (comme je le vois maintenant dans votre situation) est défini dans ApplicationController
et que vous souhaitez le contourner dans un contrôleur de sous-classe, vous pouvez utiliser un skip_before_filter
avec les mêmes qualifications dans le contrôleur de sous-classe:
skip_before_filter :filter_name, :except => [:action1, :action2]
Dans le contrôleur où vous souhaitez ignorer un filtre avant spécifié dans un contrôleur hérité, vous pouvez dire à Rails d'ignorer le filtre
class ApplicationController
before_filter :authenticate_user!
end
class SessionsController < ApplicationController
skip_before_filter :authenticate_user!
end
Dans config/application.rb
config.to_prepare do
Devise::SessionsController.skip_before_filter :authenticate_user!
end
Référencé par:
Comment ignorer un before_filter pour Devise's SessionsController?
Les réponses ci-dessus sont bonnes, sauf: DEPRECATION WARNING: skip_before_filter is deprecated and will be removed in Rails 5.1. Use skip_before_action instead.
Veuillez donc utiliser before_action
et skip_before_action
au lieu de *-filter
.