Activeadmin: Cannot create custom authentication or use 'authenticate_admin_user!' or 'current_admin_user': ActionView::Template::Error: undefined method: destroy_admin_user_session_path

Created on 7 Jun 2018  ·  3Comments  ·  Source: activeadmin/activeadmin

When creating authentication according to docs using authenticate_admin_user! or current_admin_user, it generates a template error. It works if those settings are commented out (but without authentication then).

No similar bugs: https://github.com/activeadmin/activeadmin/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+ActionView%3A%3ATemplate%3A%3AError%3A+undefined+method

See https://stackoverflow.com/questions/50708446/how-do-you-implement-your-own-authentication-with-activeadmin-without-devise-ac

Expected behavior

I expect it to load the dashboard after I log in.

Actual behavior

It crashes.

How to reproduce

Provide the correct password, set the session, then it gives an error page.

routes.rb

get :login, controller: :index
post :login_post, controller: :index

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def authenticate_admin_user!
    puts session[:user].inspect
    redirect_to login_path unless session[:user] && session[:user]["admin"] == true
  end

  def current_admin_user
    session[:user]
  end

end

config/initalizers/active_admin.rb

  config.authentication_method = :authenticate_admin_user!
  config.current_user_method = :current_admin_user

index_controller.rb

class IndexController < ApplicationController
  def login_post
    if Digest::SHA256.base64digest(params[:password]) == "xxxxxxxxxxxxxx="
      session[:user] = {"admin" => true}
      redirect_to admin_root_path
    else
      flash.now.alert = 'Invalid password.'
      render :login
    end

Log

Started GET "/admin" for 127.0.0.1 at 2018-06-06 20:33:17 -0400
  ActiveRecord::SchemaMigration Load (22.1ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by Admin::DashboardController#index as HTML
{"admin"=>true}
  Rendering C:/ruby24/lib/ruby/gems/2.4.0/gems/activeadmin-1.3.0/app/views/active_admin/page/index.html.arb
  Rendered C:/ruby24/lib/ruby/gems/2.4.0/gems/activeadmin-1.3.0/app/views/active_admin/page/index.html.arb (3690.0ms)
Completed 500 Internal Server Error in 4076ms (ActiveRecord: 0.0ms)



ActionView::Template::Error (undefined method `destroy_admin_user_session_path' for "        <ul class=\"header-item tabs\" id=\"utility_nav\"></ul>\n":ActiveAdmin::Views::TabbedNavigation):
    1: insert_tag active_admin_application.view_factory["page"]

arbre (1.1.1) lib/arbre/element.rb:182:in `method_missing'
activeadmin (1.3.0) lib/active_admin/view_helpers/method_or_proc_helper.rb:58:in `public_send'
activeadmin (1.3.0) lib/active_admin/view_helpers/method_or_proc_helper.rb:58:in `call_method_or_proc_on'
activeadmin (1.3.0) lib/active_admin/view_helpers/method_or_proc_helper.rb:77:in `render_or_call_method_or_proc_on'
arbre (1.1.1) lib/arbre/element.rb:180:in `method_missing'
activeadmin (1.3.0) lib/active_admin/namespace.rb:142:in `block in add_logout_button_to_menu'
activeadmin (1.3.0) lib/active_admin/view_helpers/method_or_proc_helper.rb:90:in `instance_exec'
activeadmin (1.3.0) lib/active_admin/view_helpers/method_or_proc_helper.rb:90:in `render_in_context'
activeadmin (1.3.0) lib/active_admin/menu_item.rb:71:in `url'
activeadmin (1.3.0) lib/active_admin/menu_item.rb:92:in `real_url?'
activeadmin (1.3.0) lib/active_admin/menu_item.rb:78:in `display?'
activeadmin (1.3.0) lib/active_admin/menu.rb:74:in `block in items'
activeadmin (1.3.0) lib/active_admin/menu.rb:74:in `select'
activeadmin (1.3.0) lib/active_admin/menu.rb:74:in `items'
activeadmin (1.3.0) lib/active_admin/views/tabbed_navigation.rb:27:in `menu_items'
activeadmin (1.3.0) lib/active_admin/views/tabbed_navigation.rb:37:in `build_menu'
activeadmin (1.3.0) lib/active_admin/views/tabbed_navigation.rb:22:in `build'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:30:in `block in build_tag'
arbre (1.1.1) lib/arbre/context.rb:92:in `with_current_arbre_element'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:49:in `with_current_arbre_element'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:26:in `build_tag'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:39:in `insert_tag'
activeadmin (1.3.0) lib/active_admin/views/header.rb:26:in `build_utility_navigation'
activeadmin (1.3.0) lib/active_admin/views/header.rb:14:in `build'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:30:in `block in build_tag'
arbre (1.1.1) lib/arbre/context.rb:92:in `with_current_arbre_element'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:49:in `with_current_arbre_element'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:26:in `build_tag'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:39:in `insert_tag'
activeadmin (1.3.0) lib/active_admin/views/pages/base.rb:67:in `build_header'
activeadmin (1.3.0) lib/active_admin/views/pages/base.rb:52:in `block (2 levels) in build_page'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:31:in `block in build_tag'
arbre (1.1.1) lib/arbre/context.rb:92:in `with_current_arbre_element'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:49:in `with_current_arbre_element'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:26:in `build_tag'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:39:in `insert_tag'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:14:in `div'
activeadmin (1.3.0) lib/active_admin/views/pages/base.rb:50:in `block in build_page'
arbre (1.1.1) lib/arbre/context.rb:92:in `with_current_arbre_element'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:49:in `with_current_arbre_element'
activeadmin (1.3.0) lib/active_admin/views/pages/base.rb:49:in `build_page'
activeadmin (1.3.0) lib/active_admin/views/pages/base.rb:10:in `build'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:30:in `block in build_tag'
arbre (1.1.1) lib/arbre/context.rb:92:in `with_current_arbre_element'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:26:in `build_tag'
arbre (1.1.1) lib/arbre/element/builder_methods.rb:39:in `insert_tag'
activeadmin (1.3.0) app/views/active_admin/page/index.html.arb:2:in `block in ____ruby___lib_ruby_gems_______gems_activeadmin_______app_views_active_admin_page_index_html_arb___1463220084_73277080'
arbre (1.1.1) lib/arbre/context.rb:45:in `instance_eval'
arbre (1.1.1) lib/arbre/context.rb:45:in `initialize'
activeadmin (1.3.0) app/views/active_admin/page/index.html.arb:1:in `new'
activeadmin (1.3.0) app/views/active_admin/page/index.html.arb:1:in `____ruby___lib_ruby_gems_______gems_activeadmin_______app_views_active_admin_page_index_html_arb___1463220084_73277080'
actionview (5.0.7) lib/action_view/template.rb:159:in `block in render'
activesupport (5.0.7) lib/active_support/notifications.rb:166:in `instrument'
actionview (5.0.7) lib/action_view/template.rb:354:in `instrument'
actionview (5.0.7) lib/action_view/template.rb:157:in `render'
actionview (5.0.7) lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
actionview (5.0.7) lib/action_view/renderer/abstract_renderer.rb:42:in `block in instrument'
activesupport (5.0.7) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (5.0.7) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (5.0.7) lib/active_support/notifications.rb:164:in `instrument'
actionview (5.0.7) lib/action_view/renderer/abstract_renderer.rb:41:in `instrument'
actionview (5.0.7) lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
actionview (5.0.7) lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
actionview (5.0.7) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
actionview (5.0.7) lib/action_view/renderer/template_renderer.rb:14:in `render'
actionview (5.0.7) lib/action_view/renderer/renderer.rb:42:in `render_template'
actionview (5.0.7) lib/action_view/renderer/renderer.rb:23:in `render'
actionview (5.0.7) lib/action_view/rendering.rb:104:in `_render_template'
actionpack (5.0.7) lib/action_controller/metal/streaming.rb:217:in `_render_template'
actionview (5.0.7) lib/action_view/rendering.rb:83:in `render_to_body'
actionpack (5.0.7) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
actionpack (5.0.7) lib/action_controller/metal/renderers.rb:142:in `render_to_body'
actionpack (5.0.7) lib/abstract_controller/rendering.rb:26:in `render'
actionpack (5.0.7) lib/action_controller/metal/rendering.rb:36:in `render'
actionpack (5.0.7) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
activesupport (5.0.7) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
C:/ruby24/lib/ruby/2.4.0/benchmark.rb:308:in `realtime'
activesupport (5.0.7) lib/active_support/core_ext/benchmark.rb:12:in `ms'
actionpack (5.0.7) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
actionpack (5.0.7) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
activerecord (5.0.7) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
actionpack (5.0.7) lib/action_controller/metal/instrumentation.rb:43:in `render'
activeadmin (1.3.0) lib/active_admin/page_controller.rb:14:in `index'
actionpack (5.0.7) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
actionpack (5.0.7) lib/abstract_controller/base.rb:188:in `process_action'
actionpack (5.0.7) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.0.7) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (5.0.7) lib/active_support/callbacks.rb:126:in `call'
activesupport (5.0.7) lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
activesupport (5.0.7) lib/active_support/callbacks.rb:455:in `call'
activesupport (5.0.7) lib/active_support/callbacks.rb:101:in `__run_callbacks__'
activesupport (5.0.7) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks'
activesupport (5.0.7) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.7) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (5.0.7) lib/action_controller/metal/rescue.rb:20:in `process_action'
actionpack (5.0.7) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (5.0.7) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (5.0.7) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (5.0.7) lib/active_support/notifications.rb:164:in `instrument'
actionpack (5.0.7) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (5.0.7) lib/action_controller/metal/params_wrapper.rb:248:in `process_action'
activerecord (5.0.7) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (5.0.7) lib/abstract_controller/base.rb:126:in `process'
actionview (5.0.7) lib/action_view/rendering.rb:30:in `process'
actionpack (5.0.7) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (5.0.7) lib/action_controller/metal.rb:262:in `dispatch'
actionpack (5.0.7) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (5.0.7) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (5.0.7) lib/action_dispatch/journey/router.rb:39:in `block in serve'
actionpack (5.0.7) lib/action_dispatch/journey/router.rb:26:in `each'
actionpack (5.0.7) lib/action_dispatch/journey/router.rb:26:in `serve'
actionpack (5.0.7) lib/action_dispatch/routing/route_set.rb:727:in `call'
rack (2.0.5) lib/rack/etag.rb:25:in `call'
rack (2.0.5) lib/rack/conditional_get.rb:25:in `call'
rack (2.0.5) lib/rack/head.rb:12:in `call'
rack (2.0.5) lib/rack/session/abstract/id.rb:232:in `context'
rack (2.0.5) lib/rack/session/abstract/id.rb:226:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/cookies.rb:613:in `call'
activerecord (5.0.7) lib/active_record/migration.rb:553:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
activesupport (5.0.7) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
activesupport (5.0.7) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
activesupport (5.0.7) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.7) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
web-console (3.6.2) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.6.2) lib/web_console/middleware.rb:30:in `block in call'
web-console (3.6.2) lib/web_console/middleware.rb:20:in `catch'
web-console (3.6.2) lib/web_console/middleware.rb:20:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.0.7) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.7) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.7) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.0.7) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.7) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.0.7) lib/rails/rack/logger.rb:24:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/request_id.rb:24:in `call'
rack (2.0.5) lib/rack/method_override.rb:22:in `call'
rack (2.0.5) lib/rack/runtime.rb:22:in `call'
activesupport (5.0.7) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.7) lib/action_dispatch/middleware/static.rb:136:in `call'
rack (2.0.5) lib/rack/sendfile.rb:111:in `call'
railties (5.0.7) lib/rails/engine.rb:522:in `call'
puma (3.11.4) lib/puma/configuration.rb:225:in `call'
puma (3.11.4) lib/puma/server.rb:632:in `handle_request'
puma (3.11.4) lib/puma/server.rb:446:in `process_client'
puma (3.11.4) lib/puma/server.rb:306:in `block in run'
puma (3.11.4) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
  Rendering C:/ruby24/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout
  Rendering C:/ruby24/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered C:/ruby24/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (8.0ms)
  Rendering C:/ruby24/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered C:/ruby24/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (3.0ms)
  Rendering C:/ruby24/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered C:/ruby24/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.0ms)
  Rendered C:/ruby24/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (8225.2ms)

ActiveAdmin loads fine with config.authentication_method and config.current_user_method commented.

Rails 5.0.7, ActiveAdmin 1.3.0

Most helpful comment

I did, but there is no reason it should crash, and no reason it shouldn't explain in the documentation how to add your own custom authentication.

All 3 comments

@starrychloe You appear to have answered your own question on StackOverflow.

I did, but there is no reason it should crash, and no reason it shouldn't explain in the documentation how to add your own custom authentication.

Pull request welcome.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

thejspr picture thejspr  ·  3Comments

gcerquant picture gcerquant  ·  3Comments

kaspernj picture kaspernj  ·  3Comments

gingray picture gingray  ·  3Comments

dheerajk3 picture dheerajk3  ·  3Comments