mirror of
https://github.com/heartcombo/devise.git
synced 2022-11-09 12:18:31 -05:00
Allow to give :skip in devise_for to skip routes for an specific controller.
This commit is contained in:
parent
59b26d8427
commit
3f0bae1968
7 changed files with 17 additions and 8 deletions
|
@ -83,6 +83,10 @@ module ActionDispatch::Routing
|
||||||
#
|
#
|
||||||
# devise_for :users, :controllers => { :sessions => "users/sessions" }
|
# devise_for :users, :controllers => { :sessions => "users/sessions" }
|
||||||
#
|
#
|
||||||
|
# * :skip => tell which modules you want to skip routes from being created:
|
||||||
|
#
|
||||||
|
# devise_for :users, :skip => :authenticatable
|
||||||
|
#
|
||||||
def devise_for(*resources)
|
def devise_for(*resources)
|
||||||
options = resources.extract_options!
|
options = resources.extract_options!
|
||||||
resources.map!(&:to_sym)
|
resources.map!(&:to_sym)
|
||||||
|
@ -99,7 +103,8 @@ module ActionDispatch::Routing
|
||||||
Devise.default_scope ||= mapping.name
|
Devise.default_scope ||= mapping.name
|
||||||
Devise.mappings[mapping.name] = mapping
|
Devise.mappings[mapping.name] = mapping
|
||||||
|
|
||||||
mapping.modules.each do |mod|
|
routes_modules = mapping.modules - Array(options.delete(:skip))
|
||||||
|
routes_modules.each do |mod|
|
||||||
send(mod, mapping, mapping.controllers) if self.respond_to?(mod, true)
|
send(mod, mapping, mapping.controllers) if self.respond_to?(mod, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,7 +26,7 @@ class MappingTest < ActiveSupport::TestCase
|
||||||
allowed = Devise.mappings[:admin].allowed_controllers
|
allowed = Devise.mappings[:admin].allowed_controllers
|
||||||
assert allowed.include?("sessions")
|
assert allowed.include?("sessions")
|
||||||
assert_not allowed.include?("devise/confirmations")
|
assert_not allowed.include?("devise/confirmations")
|
||||||
assert_not allowed.include?("devise/passwords")
|
assert_not allowed.include?("devise/unlocks")
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'find mapping by path' do
|
test 'find mapping by path' do
|
||||||
|
@ -110,8 +110,9 @@ class MappingTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
mapping = Devise.mappings[:admin]
|
mapping = Devise.mappings[:admin]
|
||||||
assert mapping.authenticatable?
|
assert mapping.authenticatable?
|
||||||
|
assert mapping.recoverable?
|
||||||
assert_not mapping.confirmable?
|
assert_not mapping.confirmable?
|
||||||
assert_not mapping.recoverable?
|
assert_not mapping.lockable?
|
||||||
assert_not mapping.rememberable?
|
assert_not mapping.rememberable?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,7 +23,7 @@ class ActiveRecordTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'add modules cherry pick' do
|
test 'add modules cherry pick' do
|
||||||
assert_include_modules Admin, :authenticatable, :registerable, :timeoutable
|
assert_include_modules Admin, :authenticatable, :registerable, :timeoutable, :recoverable
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'set a default value for stretches' do
|
test 'set a default value for stretches' do
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class Admin < ActiveRecord::Base
|
class Admin < ActiveRecord::Base
|
||||||
devise :authenticatable, :registerable, :timeoutable
|
devise :authenticatable, :registerable, :timeoutable, :recoverable
|
||||||
|
|
||||||
def self.find_for_authentication(conditions)
|
def self.find_for_authentication(conditions)
|
||||||
last(:conditions => conditions)
|
last(:conditions => conditions)
|
||||||
|
|
|
@ -2,7 +2,7 @@ class Admin
|
||||||
include MongoMapper::Document
|
include MongoMapper::Document
|
||||||
include MongoMapper::Plugins::Callbacks
|
include MongoMapper::Plugins::Callbacks
|
||||||
|
|
||||||
devise :authenticatable, :timeoutable, :registerable
|
devise :authenticatable, :timeoutable, :registerable, :recoverable
|
||||||
|
|
||||||
def self.find_for_authentication(conditions)
|
def self.find_for_authentication(conditions)
|
||||||
last(:conditions => conditions, :order => "email")
|
last(:conditions => conditions, :order => "email")
|
||||||
|
|
|
@ -6,7 +6,7 @@ Rails::Application.routes.draw do
|
||||||
resources :admins, :only => [:index]
|
resources :admins, :only => [:index]
|
||||||
|
|
||||||
devise_for :users
|
devise_for :users
|
||||||
devise_for :admin, :as => "admin_area", :controllers => { :sessions => "sessions" }
|
devise_for :admin, :as => "admin_area", :controllers => { :sessions => "sessions" }, :skip => :recoverable
|
||||||
devise_for :accounts, :scope => "manager", :path_prefix => ":locale",
|
devise_for :accounts, :scope => "manager", :path_prefix => ":locale",
|
||||||
:class_name => "User", :path_names => {
|
:class_name => "User", :path_names => {
|
||||||
:sign_in => "login", :sign_out => "logout",
|
:sign_in => "login", :sign_out => "logout",
|
||||||
|
@ -17,5 +17,8 @@ Rails::Application.routes.draw do
|
||||||
match "/admin_area/home", :to => "admins#index", :as => :admin_root
|
match "/admin_area/home", :to => "admins#index", :as => :admin_root
|
||||||
match "/sign_in", :to => "devise/sessions#new"
|
match "/sign_in", :to => "devise/sessions#new"
|
||||||
|
|
||||||
|
# Dummy route for new admin pasword
|
||||||
|
match "/anywhere", :to => "foo#bar", :as => :new_admin_password
|
||||||
|
|
||||||
root :to => "home#index"
|
root :to => "home#index"
|
||||||
end
|
end
|
|
@ -84,7 +84,7 @@ class MapRoutingTest < ActionController::TestCase
|
||||||
|
|
||||||
test 'does not map admin confirmation' do
|
test 'does not map admin confirmation' do
|
||||||
assert_raise ActionController::RoutingError do
|
assert_raise ActionController::RoutingError do
|
||||||
assert_recognizes({:controller => 'devise/confirmations', :action => 'new'}, 'admin_area/confirmation/new')
|
assert_recognizes({:controller => 'devise/passwords', :action => 'new'}, 'admin_area/password/new')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue