Could not find devise mapping for path "/sessions/user" devise log in error

21,154

Solution 1

in your routes.rb file, try wrapping your routes inside the scope block as the error message suggests. Here is an example:

devise_scope :user do
   get "signup", to: "devise/registrations#new"
   get "login", to: "devise/sessions#new"
   get "logout", to: "devise/sessions#destroy"
end

This will give you nicely named routes.

And by the way, if you are using Rails 4, get rid of the match method. you need to specify the HTTP verb.


OBSOLETE old answer:

(Below is the old obsolete version of the code, shown for reference. Use the code above.)

devise_for :users, path_names: { sign_in: 'login', sign_out: 'logout', sign_up: 'signup' }

AND

match '/sessions/user', to: 'devise/sessions#create', via: :post

Solution 2

Be careful if you nave namespaced routes to declare the devise_scope a little different:

namespace :api, defaults: {format: 'json'} do 
  namespace :v1 do 
    devise_scope :api_v1_user do
      ...
    end
  end
end

Solution 3

This error (AbstractController::ActionNotFound - Could not find devise mapping for path) can arise if devise_scope is passed a plural scope instead of a singular scope.

The devise_for method takes a plural form of model scope (i.e. :users) whereas the devise_scope takes the singular form (i.e. :user).

From the devise documentations (http://www.rubydoc.info/github/plataformatec/devise/ActionDispatch%2FRouting%2FMapper%3Adevise_scope):

Also be aware of that 'devise_scope' and 'as' use the singular form of the noun where other devise route commands expect the plural form. This would be a good and working example.

devise_scope :user do
  get "/some/route" => "some_devise_controller"
end
devise_for :users

Solution 4

devise_scope :user do
  # add any route which is giving above error message
end 

Solution 5

Error is telling you:

devise_scope :user do
  match '/sessions/user', to: 'devise/sessions#create', via: :post
end

did you try that?

Share:
21,154
Aaron
Author by

Aaron

Developer in Portland, OR.

Updated on January 18, 2020

Comments

  • Aaron
    Aaron over 4 years

    Very frustrating for the last few days.

    I have a rails app with Devise installed where I generated a new User model and I generated Devise views as well.

    This happens when I try to sign in as an existing user right when I click "Log in" after filling out the email and password fields:

    AbstractController::ActionNotFound - Could not find devise mapping for path "/sessions/user".
    This may happen for two reasons:
    
    1) You forgot to wrap your route inside the scope block. For example:
    
      devise_scope :user do
        get "/some/route" => "some_devise_controller"
      end
    
    2) You are testing a Devise controller bypassing the router.
       If so, you can explicitly tell Devise which mapping to use:
    
       @request.env["devise.mapping"] = Devise.mappings[:user]
    
    :
      devise (3.2.4) app/controllers/devise_controller.rb:84:in `unknown_action!'
      devise (3.2.4) app/controllers/devise_controller.rb:59:in `assert_is_devise_resource!'
      devise (3.2.4) app/controllers/devise_controller.rb:97:in `require_no_authentication'
      activesupport (4.0.4) lib/active_support/callbacks.rb:397:in `_run__1955514966561508052__process_action__callbacks'
      activesupport (4.0.4) lib/active_support/callbacks.rb:80:in `run_callbacks'
      actionpack (4.0.4) lib/abstract_controller/callbacks.rb:17:in `process_action'
      actionpack (4.0.4) lib/action_controller/metal/rescue.rb:29:in `process_action'
      actionpack (4.0.4) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
      activesupport (4.0.4) lib/active_support/notifications.rb:159:in `block in instrument'
      activesupport (4.0.4) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
      activesupport (4.0.4) lib/active_support/notifications.rb:159:in `instrument'
      actionpack (4.0.4) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
      actionpack (4.0.4) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
      activerecord (4.0.4) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
      actionpack (4.0.4) lib/abstract_controller/base.rb:136:in `process'
      actionpack (4.0.4) lib/abstract_controller/rendering.rb:44:in `process'
      actionpack (4.0.4) lib/action_controller/metal.rb:195:in `dispatch'
      actionpack (4.0.4) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
      actionpack (4.0.4) lib/action_controller/metal.rb:231:in `block in action'
      actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
      actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:48:in `call'
      actionpack (4.0.4) lib/action_dispatch/journey/router.rb:71:in `block in call'
      actionpack (4.0.4) lib/action_dispatch/journey/router.rb:59:in `call'
      actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:674:in `call'
      warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
      warden (1.2.3) lib/warden/manager.rb:34:in `call'
      rack (1.5.2) lib/rack/etag.rb:23:in `call'
      rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
      rack (1.5.2) lib/rack/head.rb:11:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/flash.rb:241:in `call'
      rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
      rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/cookies.rb:486:in `call'
      activerecord (4.0.4) lib/active_record/query_cache.rb:36:in `call'
      activerecord (4.0.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
      activerecord (4.0.4) lib/active_record/migration.rb:373:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
      activesupport (4.0.4) lib/active_support/callbacks.rb:373:in `_run__2142997860843545523__call__callbacks'
      activesupport (4.0.4) lib/active_support/callbacks.rb:80:in `run_callbacks'
      actionpack (4.0.4) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/reloader.rb:64:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
      better_errors (1.1.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
      better_errors (1.1.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
      better_errors (1.1.0) lib/better_errors/middleware.rb:56:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
      railties (4.0.4) lib/rails/rack/logger.rb:38:in `call_app'
      railties (4.0.4) lib/rails/rack/logger.rb:20:in `block in call'
      activesupport (4.0.4) lib/active_support/tagged_logging.rb:68:in `block in tagged'
      activesupport (4.0.4) lib/active_support/tagged_logging.rb:26:in `tagged'
      activesupport (4.0.4) lib/active_support/tagged_logging.rb:68:in `tagged'
      railties (4.0.4) lib/rails/rack/logger.rb:20:in `call'
      quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets'
      actionpack (4.0.4) lib/action_dispatch/middleware/request_id.rb:21:in `call'
      rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
      rack (1.5.2) lib/rack/runtime.rb:17:in `call'
      activesupport (4.0.4) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
      rack (1.5.2) lib/rack/lock.rb:17:in `call'
      actionpack (4.0.4) lib/action_dispatch/middleware/static.rb:64:in `call'
      rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
      railties (4.0.4) lib/rails/engine.rb:511:in `call'
      railties (4.0.4) lib/rails/application.rb:97:in `call'
      rack (1.5.2) lib/rack/lock.rb:17:in `call'
      rack (1.5.2) lib/rack/content_length.rb:14:in `call'
      rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
      /Users/AaronWilliamson/.rubies/ruby-2.1.0/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
      /Users/AaronWilliamson/.rubies/ruby-2.1.0/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
      /Users/AaronWilliamson/.rubies/ruby-2.1.0/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'
    

    The thing is, when I sign up as a new user, it works just fine. I can fill in the appropriate fields, click "Sign up" and it notifies me that I've logged in successfully and redirects me to the root URL showing the user as logged in. The error only occurs when I try to log in.

    Here are my routes:

    Ripelist::Application.routes.draw do
      devise_for :users, path_names: { sign_in: 'login', sign_out: 'logout', sign_up: 'signup' }
      root to: 'listings#index'
      match '/sessions/user', to: 'devise/sessions#create', via: :post
    
      resources :users
      resources :listings
      resources :categories
      resources :sessions
    end
    

    Can anybody help?