J'ai une Rails 4.2.x app, avec dispositif d'authentification - j'ai plusieurs contrôleurs.
Je veux le modèle authenticate_user! à exécuter sur tous les contrôleurs et actions sauf sur l'action d'index du contrôleur domestique. (Bien sûr, authenticate_user! Lui-même prend soin de concevoir des actions comme la connexion)
Je peux m'assurer que chaque action du contrôleur exécute l'action before_action dans application_controller.rb:
class ApplicationController < ActionController::Base
before_action :authenticate_user!
...
end
Je peux également restreindre un ensemble spécifique d'actions sur les contrôleurs all:
class ApplicationController < ActionController::Base
before_action :authenticate_user!, except: [:index]
...
end
Mais je ne vois pas comment faire juste home/index pour être une exception.
Je pourrais bien sûr ajouter manuellement before_action :authenticate_user!
à chaque contrôleur et ajoutez une exception au contrôleur principal pour l'action d'indexation. Mais ce n'est pas très sec, et si j'ajoute de nouveaux contrôleurs, je dois me rappeler d'ajouter ceci avant_action à chacun d'eux.
Ce que vous devez faire est de définir autheticate_user! sur tous les contrôleurs comme ça:
class ApplicationController < ActionController::Base
before_action :authenticate_user!
...
end
Et puis sur votre HomeController vous faites cela:
class HomeController < ApplicationController
skip_before_action :authenticate_user!, only: [:index]
...
end
J'espère que ceci vous aidera !