ruby-on-railsrubyruby-on-rails-3rails-adminsorcery

Rails admin with Sorcery


I'm trying to install the Rails Admin Gem using Sorcery for authentication instead of Devise.

Rails admin does provide a hook that you can use to attach your own authentication method. Here is the example they provide in their docs (using warden):

config.authenticate_with do
  warden.authenticate! :scope => :admin
end
config.current_user_method { current_admin }

I'm guessing that inside the block I need to reference the before_filter that Sorcery uses to authenticate users, which would be require_login.

However, when I try that and I try to visit /admin when logged out, I get a routing error:

No route matches {:action=>"new", :controller=>"sessions"}

This probably happens because I am being redirected within the engine rather than in the main app.

How can I set this up correctly?


Solution

  • # config/initializers/rails_admin.rb
    RailsAdmin.config do |config|
      config.authenticate_with do
        # Use sorcery's before filter to auth users
        require_login
      end
    end
    
    # app/controllers/application_controller.rb
    class ApplicationController
      # Overwrite the method sorcery calls when it
      # detects a non-authenticated request.
      def not_authenticated
        # Make sure that we reference the route from the main app.
        redirect_to main_app.login_path
      end
    end
    
    #config/initializers/rails_admin.rb
    RailsAdmin.config do |config|
      ...
      config.parent_controller = 'ApplicationController'
    end