web-dev-qa-db-fra.com

Spécifiez les contrôleurs à exclure de before_filter

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?

39
chaz hamilton

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]
78
Don Roby

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
101
Jesse Wolgamott

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?

13
Taimoor Changaiz

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.

2
akostadinov