devise 0.8.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of devise might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +21 -2
- data/README.rdoc +40 -54
- data/Rakefile +1 -1
- data/TODO +1 -3
- data/app/controllers/confirmations_controller.rb +9 -20
- data/app/controllers/passwords_controller.rb +9 -20
- data/app/controllers/sessions_controller.rb +9 -9
- data/app/controllers/unlocks_controller.rb +22 -0
- data/app/models/devise_mailer.rb +6 -1
- data/app/views/confirmations/new.html.erb +1 -5
- data/app/views/devise_mailer/unlock_instructions.html.erb +7 -0
- data/app/views/passwords/edit.html.erb +1 -5
- data/app/views/passwords/new.html.erb +1 -5
- data/app/views/sessions/new.html.erb +1 -7
- data/app/views/shared/_devise_links.erb +15 -0
- data/app/views/unlocks/new.html.erb +12 -0
- data/generators/devise/templates/migration.rb +2 -0
- data/generators/devise/templates/model.rb +4 -1
- data/generators/devise_install/templates/devise.rb +20 -10
- data/lib/devise.rb +62 -18
- data/lib/devise/controllers/common.rb +24 -0
- data/lib/devise/controllers/helpers.rb +160 -80
- data/lib/devise/controllers/internal_helpers.rb +120 -0
- data/lib/devise/controllers/url_helpers.rb +2 -10
- data/lib/devise/encryptors/bcrypt.rb +2 -2
- data/lib/devise/hooks/activatable.rb +1 -4
- data/lib/devise/hooks/rememberable.rb +30 -0
- data/lib/devise/hooks/timeoutable.rb +4 -2
- data/lib/devise/locales/en.yml +9 -2
- data/lib/devise/mapping.rb +15 -11
- data/lib/devise/models.rb +16 -35
- data/lib/devise/models/activatable.rb +1 -1
- data/lib/devise/models/authenticatable.rb +1 -9
- data/lib/devise/models/confirmable.rb +6 -2
- data/lib/devise/models/lockable.rb +142 -0
- data/lib/devise/models/rememberable.rb +19 -2
- data/lib/devise/models/timeoutable.rb +1 -2
- data/lib/devise/orm/active_record.rb +2 -0
- data/lib/devise/orm/data_mapper.rb +1 -1
- data/lib/devise/orm/mongo_mapper.rb +12 -1
- data/lib/devise/rails/routes.rb +5 -1
- data/lib/devise/rails/warden_compat.rb +13 -13
- data/lib/devise/schema.rb +7 -0
- data/lib/devise/strategies/authenticatable.rb +1 -3
- data/lib/devise/strategies/base.rb +1 -1
- data/lib/devise/strategies/rememberable.rb +37 -0
- data/lib/devise/test_helpers.rb +1 -1
- data/lib/devise/version.rb +1 -1
- data/test/controllers/helpers_test.rb +155 -33
- data/test/controllers/internal_helpers_test.rb +55 -0
- data/test/devise_test.rb +24 -3
- data/test/encryptors_test.rb +3 -1
- data/test/integration/lockable_test.rb +83 -0
- data/test/integration/rememberable_test.rb +1 -1
- data/test/mailers/unlock_instructions_test.rb +62 -0
- data/test/models/authenticatable_test.rb +0 -23
- data/test/models/lockable_test.rb +202 -0
- data/test/models/timeoutable_test.rb +7 -7
- data/test/models/validatable_test.rb +2 -2
- data/test/models_test.rb +9 -76
- data/test/orm/active_record.rb +1 -0
- data/test/orm/mongo_mapper.rb +0 -1
- data/test/rails_app/app/active_record/admin.rb +1 -1
- data/test/rails_app/app/active_record/user.rb +2 -1
- data/test/rails_app/app/mongo_mapper/admin.rb +1 -1
- data/test/rails_app/app/mongo_mapper/user.rb +2 -1
- data/test/rails_app/config/initializers/devise.rb +13 -10
- data/test/rails_app/config/routes.rb +5 -3
- data/test/routes_test.rb +5 -0
- data/test/support/integration_tests_helper.rb +1 -0
- metadata +16 -12
- data/lib/devise/controllers/filters.rb +0 -186
- data/lib/devise/models/cookie_serializer.rb +0 -21
- data/lib/devise/models/session_serializer.rb +0 -19
- data/lib/devise/serializers/base.rb +0 -23
- data/lib/devise/serializers/cookie.rb +0 -43
- data/lib/devise/serializers/session.rb +0 -22
- data/test/controllers/filters_test.rb +0 -177
- data/test/rails_app/app/active_record/account.rb +0 -7
- data/test/rails_app/app/mongo_mapper/account.rb +0 -9
@@ -3,26 +3,26 @@ require 'test/test_helper'
|
|
3
3
|
class TimeoutableTest < ActiveSupport::TestCase
|
4
4
|
|
5
5
|
test 'should be expired' do
|
6
|
-
assert new_user.
|
6
|
+
assert new_user.timedout?(31.minutes.ago)
|
7
7
|
end
|
8
8
|
|
9
9
|
test 'should not be expired' do
|
10
|
-
assert_not new_user.
|
10
|
+
assert_not new_user.timedout?(29.minutes.ago)
|
11
11
|
end
|
12
12
|
|
13
13
|
test 'should not be expired when params is nil' do
|
14
|
-
assert_not new_user.
|
14
|
+
assert_not new_user.timedout?(nil)
|
15
15
|
end
|
16
16
|
|
17
17
|
test 'fallback to Devise config option' do
|
18
18
|
swap Devise, :timeout_in => 1.minute do
|
19
19
|
user = new_user
|
20
|
-
assert user.
|
21
|
-
assert_not user.
|
20
|
+
assert user.timedout?(2.minutes.ago)
|
21
|
+
assert_not user.timedout?(30.seconds.ago)
|
22
22
|
|
23
23
|
Devise.timeout_in = 5.minutes
|
24
|
-
assert_not user.
|
25
|
-
assert user.
|
24
|
+
assert_not user.timedout?(2.minutes.ago)
|
25
|
+
assert user.timedout?(6.minutes.ago)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -18,7 +18,7 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
18
18
|
user.email = existing_user.email
|
19
19
|
assert user.invalid?
|
20
20
|
assert user.errors[:email]
|
21
|
-
assert_equal 1, user.errors[:email].
|
21
|
+
assert_equal 1, [*user.errors[:email]].size
|
22
22
|
assert_equal 'has already been taken', user.errors[:email]
|
23
23
|
end
|
24
24
|
|
@@ -30,7 +30,7 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
30
30
|
user.email = email
|
31
31
|
assert user.invalid?, 'should be invalid with email ' << email
|
32
32
|
assert user.errors[:email]
|
33
|
-
assert_equal 1, user.errors[:email].
|
33
|
+
assert_equal 1, [*user.errors[:email]].size
|
34
34
|
assert_equal 'is invalid', user.errors[:email]
|
35
35
|
end
|
36
36
|
end
|
data/test/models_test.rb
CHANGED
@@ -1,47 +1,9 @@
|
|
1
1
|
require 'test/test_helper'
|
2
2
|
|
3
|
-
class Authenticatable < User
|
4
|
-
devise :authenticatable
|
5
|
-
end
|
6
|
-
|
7
|
-
class Confirmable < User
|
8
|
-
devise :authenticatable, :confirmable
|
9
|
-
end
|
10
|
-
|
11
|
-
class Recoverable < User
|
12
|
-
devise :authenticatable, :recoverable
|
13
|
-
end
|
14
|
-
|
15
|
-
class Rememberable < User
|
16
|
-
devise :authenticatable, :rememberable
|
17
|
-
end
|
18
|
-
|
19
|
-
class Trackable < User
|
20
|
-
devise :authenticatable, :trackable
|
21
|
-
end
|
22
|
-
|
23
|
-
class Timeoutable < User
|
24
|
-
devise :authenticatable, :timeoutable
|
25
|
-
end
|
26
|
-
|
27
|
-
class IsValidatable < User
|
28
|
-
devise :authenticatable, :validatable
|
29
|
-
end
|
30
|
-
|
31
|
-
class Devisable < User
|
32
|
-
devise :all
|
33
|
-
end
|
34
|
-
|
35
|
-
class Exceptable < User
|
36
|
-
devise :all, :except => [:recoverable, :rememberable, :validatable]
|
37
|
-
end
|
38
|
-
|
39
3
|
class Configurable < User
|
40
|
-
devise :
|
41
|
-
|
42
|
-
|
43
|
-
:remember_for => 7.days,
|
44
|
-
:timeout_in => 15.minutes
|
4
|
+
devise :authenticatable, :confirmable, :rememberable, :timeoutable, :lockable,
|
5
|
+
:stretches => 15, :pepper => 'abcdef', :confirm_within => 5.days,
|
6
|
+
:remember_for => 7.days, :timeout_in => 15.minutes, :unlock_in => 10.days
|
45
7
|
end
|
46
8
|
|
47
9
|
class ActiveRecordTest < ActiveSupport::TestCase
|
@@ -60,41 +22,8 @@ class ActiveRecordTest < ActiveSupport::TestCase
|
|
60
22
|
end
|
61
23
|
end
|
62
24
|
|
63
|
-
test 'add
|
64
|
-
assert_include_modules
|
65
|
-
end
|
66
|
-
|
67
|
-
test 'add confirmable module only' do
|
68
|
-
assert_include_modules Confirmable, :authenticatable, :confirmable
|
69
|
-
end
|
70
|
-
|
71
|
-
test 'add recoverable module only' do
|
72
|
-
assert_include_modules Recoverable, :authenticatable, :recoverable
|
73
|
-
end
|
74
|
-
|
75
|
-
test 'add rememberable module only' do
|
76
|
-
assert_include_modules Rememberable, :authenticatable, :rememberable
|
77
|
-
end
|
78
|
-
|
79
|
-
test 'add trackable module only' do
|
80
|
-
assert_include_modules Trackable, :authenticatable, :trackable
|
81
|
-
end
|
82
|
-
|
83
|
-
test 'add timeoutable module only' do
|
84
|
-
assert_include_modules Timeoutable, :authenticatable, :timeoutable
|
85
|
-
end
|
86
|
-
|
87
|
-
test 'add validatable module only' do
|
88
|
-
assert_include_modules IsValidatable, :authenticatable, :validatable
|
89
|
-
end
|
90
|
-
|
91
|
-
test 'add all modules' do
|
92
|
-
assert_include_modules Devisable,
|
93
|
-
:authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable
|
94
|
-
end
|
95
|
-
|
96
|
-
test 'configure modules with except option' do
|
97
|
-
assert_include_modules Exceptable, :authenticatable, :confirmable, :trackable
|
25
|
+
test 'add modules cherry pick' do
|
26
|
+
assert_include_modules Admin, :authenticatable, :timeoutable
|
98
27
|
end
|
99
28
|
|
100
29
|
test 'set a default value for stretches' do
|
@@ -117,6 +46,10 @@ class ActiveRecordTest < ActiveSupport::TestCase
|
|
117
46
|
assert_equal 15.minutes, Configurable.timeout_in
|
118
47
|
end
|
119
48
|
|
49
|
+
test 'set a default value for unlock_in' do
|
50
|
+
assert_equal 10.days, Configurable.unlock_in
|
51
|
+
end
|
52
|
+
|
120
53
|
test 'set null fields on migrations' do
|
121
54
|
Admin.create!
|
122
55
|
end
|
data/test/orm/active_record.rb
CHANGED
data/test/orm/mongo_mapper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class Admin
|
2
2
|
include MongoMapper::Document
|
3
3
|
|
4
|
-
devise :
|
4
|
+
devise :authenticatable, :timeoutable
|
5
5
|
|
6
6
|
def self.find_for_authentication(conditions)
|
7
7
|
last(:conditions => conditions, :order => "email")
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class User
|
2
2
|
include MongoMapper::Document
|
3
3
|
key :created_at, DateTime
|
4
|
-
devise :
|
4
|
+
devise :authenticatable, :confirmable, :recoverable, :rememberable, :trackable,
|
5
|
+
:validatable, :timeoutable, :lockable
|
5
6
|
# attr_accessible :username, :email, :password, :password_confirmation
|
6
7
|
end
|
@@ -1,15 +1,6 @@
|
|
1
1
|
# Use this hook to configure devise mailer, warden hooks and so forth. The first
|
2
2
|
# four configuration values can also be set straight in your models.
|
3
3
|
Devise.setup do |config|
|
4
|
-
# Configure Devise modules used by default. You should always set this value
|
5
|
-
# because if Devise adds a new strategy, it won't be added to your application
|
6
|
-
# by default, unless you configure it here.
|
7
|
-
#
|
8
|
-
# Remember that Devise includes other modules on its own (like :activatable
|
9
|
-
# and :timeoutable) which are not included here and also plugins. So be sure
|
10
|
-
# to check the docs for a complete set.
|
11
|
-
config.all = [:authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable]
|
12
|
-
|
13
4
|
# Invoke `rake secret` and use the printed value to setup a pepper to generate
|
14
5
|
# the encrypted password. By default no pepper is used.
|
15
6
|
# config.pepper = "rake secret output"
|
@@ -43,7 +34,7 @@ Devise.setup do |config|
|
|
43
34
|
# config.timeout_in = 10.minutes
|
44
35
|
|
45
36
|
# Configure the e-mail address which will be shown in DeviseMailer.
|
46
|
-
|
37
|
+
config.mailer_sender = "please-change-me-omg@yourapp.com"
|
47
38
|
|
48
39
|
# Load and configure the ORM. Supports :active_record, :data_mapper and :mongo_mapper.
|
49
40
|
require "devise/orm/#{DEVISE_ORM}"
|
@@ -54,6 +45,18 @@ Devise.setup do |config|
|
|
54
45
|
# are using only default views.
|
55
46
|
# config.scoped_views = true
|
56
47
|
|
48
|
+
# Number of authentication tries before locking an account.
|
49
|
+
# config.maximum_attempts = 20
|
50
|
+
|
51
|
+
# Defines which strategy will be used to unlock an account.
|
52
|
+
# :email = Sends an unlock link to the user email
|
53
|
+
# :time = Reanables login after a certain ammount of time (see :unlock_in below)
|
54
|
+
# :both = enables both strategies
|
55
|
+
# config.unlock_strategy = :both
|
56
|
+
|
57
|
+
# Time interval to unlock the account if :time is enabled as unlock_strategy.
|
58
|
+
# config.unlock_in = 1.hour
|
59
|
+
|
57
60
|
# If you want to use other strategies, that are not (yet) supported by Devise,
|
58
61
|
# you can configure them inside the config.warden block. The example below
|
59
62
|
# allows you to setup OAuth, using http://github.com/roman/warden_oauth
|
@@ -1,9 +1,11 @@
|
|
1
1
|
ActionController::Routing::Routes.draw do |map|
|
2
2
|
map.devise_for :users
|
3
3
|
map.devise_for :admin, :as => 'admin_area'
|
4
|
-
map.devise_for :accounts, :
|
5
|
-
:
|
6
|
-
|
4
|
+
map.devise_for :accounts, :scope => 'manager', :path_prefix => ':locale',
|
5
|
+
:class_name => "User", :requirements => { :extra => 'value' }, :path_names => {
|
6
|
+
:sign_in => 'login', :sign_out => 'logout', :password => 'secret',
|
7
|
+
:confirmation => 'verification', :unlock => 'unblock'
|
8
|
+
}
|
7
9
|
|
8
10
|
map.resources :users, :only => [:index], :member => { :expire => :get }
|
9
11
|
map.resources :admins, :only => :index
|
data/test/routes_test.rb
CHANGED
@@ -67,4 +67,9 @@ class MapRoutingTest < ActionController::TestCase
|
|
67
67
|
test 'map account with custom path name for confirmation' do
|
68
68
|
assert_recognizes({:controller => 'confirmations', :action => 'new', :locale => 'en', :extra => 'value'}, '/en/accounts/verification/new')
|
69
69
|
end
|
70
|
+
|
71
|
+
test 'map account with custom path name for unlock' do
|
72
|
+
assert_recognizes({:controller => 'unlocks', :action => 'new', :locale => 'en', :extra => 'value'}, '/en/accounts/unblock/new')
|
73
|
+
end
|
74
|
+
|
70
75
|
end
|
@@ -10,6 +10,7 @@ class ActionController::IntegrationTest
|
|
10
10
|
:email => 'user@test.com', :password => '123456', :password_confirmation => '123456', :created_at => Time.now.utc
|
11
11
|
)
|
12
12
|
user.confirm! unless options[:confirm] == false
|
13
|
+
user.lock! if options[:locked] == true
|
13
14
|
user
|
14
15
|
end
|
15
16
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Jos\xC3\xA9 Valim"
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2010-01-
|
13
|
+
date: 2010-01-21 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
requirements:
|
22
22
|
- - ~>
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: 0.
|
24
|
+
version: 0.9.0
|
25
25
|
version:
|
26
26
|
description: Flexible authentication solution for Rails with Warden
|
27
27
|
email: contact@plataformatec.com.br
|
@@ -41,13 +41,17 @@ files:
|
|
41
41
|
- app/controllers/confirmations_controller.rb
|
42
42
|
- app/controllers/passwords_controller.rb
|
43
43
|
- app/controllers/sessions_controller.rb
|
44
|
+
- app/controllers/unlocks_controller.rb
|
44
45
|
- app/models/devise_mailer.rb
|
45
46
|
- app/views/confirmations/new.html.erb
|
46
47
|
- app/views/devise_mailer/confirmation_instructions.html.erb
|
47
48
|
- app/views/devise_mailer/reset_password_instructions.html.erb
|
49
|
+
- app/views/devise_mailer/unlock_instructions.html.erb
|
48
50
|
- app/views/passwords/edit.html.erb
|
49
51
|
- app/views/passwords/new.html.erb
|
50
52
|
- app/views/sessions/new.html.erb
|
53
|
+
- app/views/shared/_devise_links.erb
|
54
|
+
- app/views/unlocks/new.html.erb
|
51
55
|
- generators/devise/USAGE
|
52
56
|
- generators/devise/devise_generator.rb
|
53
57
|
- generators/devise/lib/route_devise.rb
|
@@ -61,8 +65,9 @@ files:
|
|
61
65
|
- generators/devise_views/devise_views_generator.rb
|
62
66
|
- init.rb
|
63
67
|
- lib/devise.rb
|
64
|
-
- lib/devise/controllers/
|
68
|
+
- lib/devise/controllers/common.rb
|
65
69
|
- lib/devise/controllers/helpers.rb
|
70
|
+
- lib/devise/controllers/internal_helpers.rb
|
66
71
|
- lib/devise/controllers/url_helpers.rb
|
67
72
|
- lib/devise/encryptors/authlogic_sha512.rb
|
68
73
|
- lib/devise/encryptors/base.rb
|
@@ -73,6 +78,7 @@ files:
|
|
73
78
|
- lib/devise/encryptors/sha512.rb
|
74
79
|
- lib/devise/failure_app.rb
|
75
80
|
- lib/devise/hooks/activatable.rb
|
81
|
+
- lib/devise/hooks/rememberable.rb
|
76
82
|
- lib/devise/hooks/timeoutable.rb
|
77
83
|
- lib/devise/hooks/trackable.rb
|
78
84
|
- lib/devise/locales/en.yml
|
@@ -81,10 +87,9 @@ files:
|
|
81
87
|
- lib/devise/models/activatable.rb
|
82
88
|
- lib/devise/models/authenticatable.rb
|
83
89
|
- lib/devise/models/confirmable.rb
|
84
|
-
- lib/devise/models/
|
90
|
+
- lib/devise/models/lockable.rb
|
85
91
|
- lib/devise/models/recoverable.rb
|
86
92
|
- lib/devise/models/rememberable.rb
|
87
|
-
- lib/devise/models/session_serializer.rb
|
88
93
|
- lib/devise/models/timeoutable.rb
|
89
94
|
- lib/devise/models/trackable.rb
|
90
95
|
- lib/devise/models/validatable.rb
|
@@ -95,11 +100,9 @@ files:
|
|
95
100
|
- lib/devise/rails/routes.rb
|
96
101
|
- lib/devise/rails/warden_compat.rb
|
97
102
|
- lib/devise/schema.rb
|
98
|
-
- lib/devise/serializers/base.rb
|
99
|
-
- lib/devise/serializers/cookie.rb
|
100
|
-
- lib/devise/serializers/session.rb
|
101
103
|
- lib/devise/strategies/authenticatable.rb
|
102
104
|
- lib/devise/strategies/base.rb
|
105
|
+
- lib/devise/strategies/rememberable.rb
|
103
106
|
- lib/devise/test_helpers.rb
|
104
107
|
- lib/devise/version.rb
|
105
108
|
has_rdoc: true
|
@@ -131,23 +134,26 @@ signing_key:
|
|
131
134
|
specification_version: 3
|
132
135
|
summary: Flexible authentication solution for Rails with Warden
|
133
136
|
test_files:
|
134
|
-
- test/controllers/filters_test.rb
|
135
137
|
- test/controllers/helpers_test.rb
|
138
|
+
- test/controllers/internal_helpers_test.rb
|
136
139
|
- test/controllers/url_helpers_test.rb
|
137
140
|
- test/devise_test.rb
|
138
141
|
- test/encryptors_test.rb
|
139
142
|
- test/failure_app_test.rb
|
140
143
|
- test/integration/authenticatable_test.rb
|
141
144
|
- test/integration/confirmable_test.rb
|
145
|
+
- test/integration/lockable_test.rb
|
142
146
|
- test/integration/recoverable_test.rb
|
143
147
|
- test/integration/rememberable_test.rb
|
144
148
|
- test/integration/timeoutable_test.rb
|
145
149
|
- test/integration/trackable_test.rb
|
146
150
|
- test/mailers/confirmation_instructions_test.rb
|
147
151
|
- test/mailers/reset_password_instructions_test.rb
|
152
|
+
- test/mailers/unlock_instructions_test.rb
|
148
153
|
- test/mapping_test.rb
|
149
154
|
- test/models/authenticatable_test.rb
|
150
155
|
- test/models/confirmable_test.rb
|
156
|
+
- test/models/lockable_test.rb
|
151
157
|
- test/models/recoverable_test.rb
|
152
158
|
- test/models/rememberable_test.rb
|
153
159
|
- test/models/timeoutable_test.rb
|
@@ -156,7 +162,6 @@ test_files:
|
|
156
162
|
- test/models_test.rb
|
157
163
|
- test/orm/active_record.rb
|
158
164
|
- test/orm/mongo_mapper.rb
|
159
|
-
- test/rails_app/app/active_record/account.rb
|
160
165
|
- test/rails_app/app/active_record/admin.rb
|
161
166
|
- test/rails_app/app/active_record/user.rb
|
162
167
|
- test/rails_app/app/controllers/admins_controller.rb
|
@@ -164,7 +169,6 @@ test_files:
|
|
164
169
|
- test/rails_app/app/controllers/home_controller.rb
|
165
170
|
- test/rails_app/app/controllers/users_controller.rb
|
166
171
|
- test/rails_app/app/helpers/application_helper.rb
|
167
|
-
- test/rails_app/app/mongo_mapper/account.rb
|
168
172
|
- test/rails_app/app/mongo_mapper/admin.rb
|
169
173
|
- test/rails_app/app/mongo_mapper/user.rb
|
170
174
|
- test/rails_app/config/boot.rb
|
@@ -1,186 +0,0 @@
|
|
1
|
-
module Devise
|
2
|
-
module Controllers
|
3
|
-
# Those filters are convenience methods added to ApplicationController to
|
4
|
-
# deal with Warden.
|
5
|
-
module Filters
|
6
|
-
|
7
|
-
def self.included(base)
|
8
|
-
base.class_eval do
|
9
|
-
helper_method :warden, :signed_in?, :devise_controller?,
|
10
|
-
*Devise.mappings.keys.map { |m| [:"current_#{m}", :"#{m}_signed_in?"] }.flatten
|
11
|
-
|
12
|
-
# Use devise default_url_options. We have to declare it here to overwrite
|
13
|
-
# default definitions.
|
14
|
-
def default_url_options(options=nil)
|
15
|
-
Devise::Mapping.default_url_options
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# The main accessor for the warden proxy instance
|
21
|
-
def warden
|
22
|
-
request.env['warden']
|
23
|
-
end
|
24
|
-
|
25
|
-
# Return true if it's a devise_controller. false to all controllers unless
|
26
|
-
# the controllers defined inside devise. Useful if you want to apply a before
|
27
|
-
# filter to all controller, except the ones in devise:
|
28
|
-
#
|
29
|
-
# before_filter :my_filter, :unless => { |c| c.devise_controller? }
|
30
|
-
def devise_controller?
|
31
|
-
false
|
32
|
-
end
|
33
|
-
|
34
|
-
# Attempts to authenticate the given scope by running authentication hooks,
|
35
|
-
# but does not redirect in case of failures.
|
36
|
-
def authenticate(scope)
|
37
|
-
warden.authenticate(:scope => scope)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Attempts to authenticate the given scope by running authentication hooks,
|
41
|
-
# redirecting in case of failures.
|
42
|
-
def authenticate!(scope)
|
43
|
-
warden.authenticate!(:scope => scope)
|
44
|
-
end
|
45
|
-
|
46
|
-
# Check if the given scope is signed in session, without running
|
47
|
-
# authentication hooks.
|
48
|
-
def signed_in?(scope)
|
49
|
-
warden.authenticated?(scope)
|
50
|
-
end
|
51
|
-
|
52
|
-
# Sign in an user that already was authenticated. This helper is useful for logging
|
53
|
-
# users in after sign up.
|
54
|
-
#
|
55
|
-
# Examples:
|
56
|
-
#
|
57
|
-
# sign_in :user, @user # sign_in(scope, resource)
|
58
|
-
# sign_in @user # sign_in(resource)
|
59
|
-
#
|
60
|
-
def sign_in(resource_or_scope, resource=nil)
|
61
|
-
scope ||= Devise::Mapping.find_scope!(resource_or_scope)
|
62
|
-
resource ||= resource_or_scope
|
63
|
-
warden.set_user(resource, :scope => scope)
|
64
|
-
end
|
65
|
-
|
66
|
-
# Sign out a given user or scope. This helper is useful for signing out an user
|
67
|
-
# after deleting accounts.
|
68
|
-
#
|
69
|
-
# Examples:
|
70
|
-
#
|
71
|
-
# sign_out :user # sign_out(scope)
|
72
|
-
# sign_out @user # sign_out(resource)
|
73
|
-
#
|
74
|
-
def sign_out(resource_or_scope)
|
75
|
-
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
76
|
-
warden.user(scope) # Without loading user here, before_logout hook is not called
|
77
|
-
warden.raw_session.inspect # Without this inspect here. The session does not clear.
|
78
|
-
warden.logout(scope)
|
79
|
-
end
|
80
|
-
|
81
|
-
# Returns and delete the url stored in the session for the given scope. Useful
|
82
|
-
# for giving redirect backs after sign up:
|
83
|
-
#
|
84
|
-
# Example:
|
85
|
-
#
|
86
|
-
# redirect_to stored_location_for(:user) || root_path
|
87
|
-
#
|
88
|
-
def stored_location_for(resource_or_scope)
|
89
|
-
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
90
|
-
session.delete(:"#{scope}.return_to")
|
91
|
-
end
|
92
|
-
|
93
|
-
# The default url to be used after signing in. This is used by all Devise
|
94
|
-
# controllers and you can overwrite it in your ApplicationController to
|
95
|
-
# provide a custom hook for a custom resource.
|
96
|
-
#
|
97
|
-
# By default, it first tries to find a resource_root_path, otherwise it
|
98
|
-
# uses the root path. For a user scope, you can define the default url in
|
99
|
-
# the following way:
|
100
|
-
#
|
101
|
-
# map.user_root '/users', :controller => 'users' # creates user_root_path
|
102
|
-
#
|
103
|
-
# map.resources :users do |users|
|
104
|
-
# users.root # creates user_root_path
|
105
|
-
# end
|
106
|
-
#
|
107
|
-
# If none of these are defined, root_path is used.
|
108
|
-
def after_sign_in_path_for(resource_or_scope)
|
109
|
-
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
110
|
-
home_path = :"#{scope}_root_path"
|
111
|
-
respond_to?(home_path, true) ? send(home_path) : root_path
|
112
|
-
end
|
113
|
-
|
114
|
-
# The default to be used after signing out. This is used by all Devise
|
115
|
-
# controllers and you can overwrite it in your ApplicationController to
|
116
|
-
# provide a custom hook for a custom resource.
|
117
|
-
#
|
118
|
-
# By default is the root_path.
|
119
|
-
def after_sign_out_path_for(resource_or_scope)
|
120
|
-
root_path
|
121
|
-
end
|
122
|
-
|
123
|
-
# Sign in an user and tries to redirect first to the stored location and
|
124
|
-
# then to the url specified by after_sign_in_path_for.
|
125
|
-
#
|
126
|
-
# If just a symbol is given, consider that the user was already signed in
|
127
|
-
# through other means and just perform the redirection.
|
128
|
-
def sign_in_and_redirect(*args)
|
129
|
-
sign_in(*args) unless args.size == 1 && args.first.is_a?(Symbol)
|
130
|
-
redirect_to stored_location_for(args.first) || after_sign_in_path_for(args.first)
|
131
|
-
end
|
132
|
-
|
133
|
-
# Sign out an user and tries to redirect to the url specified by
|
134
|
-
# after_sign_out_path_for.
|
135
|
-
def sign_out_and_redirect(resource_or_scope)
|
136
|
-
sign_out(resource_or_scope)
|
137
|
-
redirect_to after_sign_out_path_for(resource_or_scope)
|
138
|
-
end
|
139
|
-
|
140
|
-
# Define authentication filters and accessor helpers based on mappings.
|
141
|
-
# These filters should be used inside the controllers as before_filters,
|
142
|
-
# so you can control the scope of the user who should be signed in to
|
143
|
-
# access that specific controller/action.
|
144
|
-
# Example:
|
145
|
-
#
|
146
|
-
# Maps:
|
147
|
-
# User => :authenticatable
|
148
|
-
# Admin => :authenticatable
|
149
|
-
#
|
150
|
-
# Generated methods:
|
151
|
-
# authenticate_user! # Signs user in or redirect
|
152
|
-
# authenticate_admin! # Signs admin in or redirect
|
153
|
-
# user_signed_in? # Checks whether there is an user signed in or not
|
154
|
-
# admin_signed_in? # Checks whether there is an admin signed in or not
|
155
|
-
# current_user # Current signed in user
|
156
|
-
# current_admin # Currend signed in admin
|
157
|
-
# user_session # Session data available only to the user scope
|
158
|
-
# admin_session # Session data available only to the admin scope
|
159
|
-
#
|
160
|
-
# Use:
|
161
|
-
# before_filter :authenticate_user! # Tell devise to use :user map
|
162
|
-
# before_filter :authenticate_admin! # Tell devise to use :admin map
|
163
|
-
#
|
164
|
-
Devise.mappings.each_key do |mapping|
|
165
|
-
class_eval <<-METHODS, __FILE__, __LINE__
|
166
|
-
def authenticate_#{mapping}!
|
167
|
-
warden.authenticate!(:scope => :#{mapping})
|
168
|
-
end
|
169
|
-
|
170
|
-
def #{mapping}_signed_in?
|
171
|
-
warden.authenticated?(:#{mapping})
|
172
|
-
end
|
173
|
-
|
174
|
-
def current_#{mapping}
|
175
|
-
@current_#{mapping} ||= warden.user(:#{mapping})
|
176
|
-
end
|
177
|
-
|
178
|
-
def #{mapping}_session
|
179
|
-
warden.session(:#{mapping})
|
180
|
-
end
|
181
|
-
METHODS
|
182
|
-
end
|
183
|
-
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|