The routes.rb contain:
...
resources :mystuff
...
the application_controller contain:
...
before_action :check_login, except: [:login, :auth]
...
On the login page I have a link_to mystuff_path that never happens.
The problem is that I want to allow all actions in mystuff regardless of login-status.
How do I need to modify the before_action to allow that? (Using Ruby 2.3.1, Rails 5.2.6)
I've tried:
...
before_action :do_stuff
...
def do_stuff
check_login unless mystuff_path || login_path || auth_path
end
...
which allows mystuff-actions and normal login, but causes ActionController::InvalidAuthenticityToken, which I think is unrelated (to this one) problem to be solved. Also I don't know what else may be clobbered this way, e.g.: validation? ?
CodePudding user response:
Use skip_before_action to skip a callback. For example:
class ApplicationController
before_action :authenticate_user! # secure by default
end
class PostsController < ApplicationController
skip_before_action :authenticate_user! # opt out of authentication for this controller
end
It takes the same only, except, if and unless options as before_action which can be used for more fine grained control:
class PostsController < ApplicationController
skip_before_action :authenticate_user!, only: [:show, :index]
end
class PostsController < ApplicationController
skip_before_action :authenticate_user!, unless: :some_condition?
end
