authenticate 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/Gemfile +0 -4
- data/Gemfile.lock +0 -5
- data/README.md +149 -78
- data/app/controllers/authenticate/passwords_controller.rb +130 -0
- data/app/controllers/authenticate/sessions_controller.rb +46 -0
- data/app/controllers/authenticate/users_controller.rb +46 -0
- data/app/mailers/authenticate_mailer.rb +13 -0
- data/app/views/authenticate_mailer/change_password.html.erb +8 -0
- data/app/views/authenticate_mailer/change_password.text.erb +5 -0
- data/app/views/layouts/application.html.erb +25 -0
- data/app/views/passwords/edit.html.erb +20 -0
- data/app/views/passwords/new.html.erb +19 -0
- data/app/views/sessions/new.html.erb +28 -0
- data/app/views/users/new.html.erb +24 -0
- data/authenticate.gemspec +1 -2
- data/config/locales/authenticate.en.yml +57 -0
- data/config/routes.rb +14 -1
- data/lib/authenticate/callbacks/brute_force.rb +5 -9
- data/lib/authenticate/callbacks/lifetimed.rb +1 -0
- data/lib/authenticate/callbacks/timeoutable.rb +2 -1
- data/lib/authenticate/callbacks/trackable.rb +1 -3
- data/lib/authenticate/configuration.rb +94 -5
- data/lib/authenticate/controller.rb +69 -9
- data/lib/authenticate/debug.rb +1 -0
- data/lib/authenticate/engine.rb +4 -11
- data/lib/authenticate/model/brute_force.rb +22 -3
- data/lib/authenticate/model/db_password.rb +12 -7
- data/lib/authenticate/model/email.rb +8 -10
- data/lib/authenticate/model/password_reset.rb +76 -0
- data/lib/authenticate/model/timeoutable.rb +9 -3
- data/lib/authenticate/model/trackable.rb +1 -1
- data/lib/authenticate/model/username.rb +21 -8
- data/lib/authenticate/modules.rb +19 -1
- data/lib/authenticate/session.rb +3 -1
- data/lib/authenticate/user.rb +6 -1
- data/lib/authenticate/version.rb +1 -1
- data/lib/generators/authenticate/controllers/USAGE +12 -0
- data/lib/generators/authenticate/controllers/controllers_generator.rb +21 -0
- data/lib/generators/authenticate/install/USAGE +7 -0
- data/lib/generators/authenticate/install/install_generator.rb +140 -0
- data/lib/generators/authenticate/install/templates/authenticate.rb +22 -0
- data/lib/generators/authenticate/install/templates/db/migrate/add_authenticate_brute_force_to_users.rb +6 -0
- data/lib/generators/authenticate/install/templates/db/migrate/add_authenticate_password_reset_to_users.rb +7 -0
- data/lib/generators/authenticate/install/templates/db/migrate/add_authenticate_timeoutable_to_users.rb +5 -0
- data/lib/generators/authenticate/install/templates/db/migrate/add_authenticate_to_users.rb +21 -0
- data/lib/generators/authenticate/install/templates/db/migrate/create_users.rb +14 -0
- data/lib/generators/authenticate/install/templates/user.rb +3 -0
- data/lib/generators/authenticate/routes/USAGE +8 -0
- data/lib/generators/authenticate/routes/routes_generator.rb +32 -0
- data/lib/generators/authenticate/routes/templates/routes.rb +10 -0
- data/lib/generators/authenticate/views/USAGE +13 -0
- data/lib/generators/authenticate/views/views_generator.rb +21 -0
- data/spec/dummy/app/controllers/application_controller.rb +1 -0
- data/spec/dummy/config/initializers/authenticate.rb +12 -5
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20160130192728_create_users.rb +18 -0
- data/spec/dummy/db/migrate/20160130192729_add_authenticate_brute_force_to_users.rb +6 -0
- data/spec/dummy/db/migrate/20160130192730_add_authenticate_timeoutable_to_users.rb +5 -0
- data/spec/dummy/db/migrate/20160130192731_add_authenticate_password_reset_to_users.rb +7 -0
- data/spec/dummy/db/schema.rb +14 -10
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/factories/users.rb +5 -8
- data/spec/model/brute_force_spec.rb +63 -0
- data/spec/model/session_spec.rb +4 -0
- data/spec/model/user_spec.rb +15 -5
- data/spec/spec_helper.rb +2 -1
- metadata +41 -9
- data/app/controllers/.keep +0 -0
- data/app/mailers/.keep +0 -0
- data/app/views/.keep +0 -0
- data/spec/dummy/db/migrate/20160120003910_create_users.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1233e7491c83dd3155f5546e45fe6de01e3dfba3
|
4
|
+
data.tar.gz: 8cf747a94820850842e2ae37137a2be1bdd22f6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 578c426daca72149a48eea0340da3df6c98dda9df0707eef6479dc9aa2b622ccfe113ab16a2cfe1bf693974368545af190710371f29959108b01bc6b40cd408b
|
7
|
+
data.tar.gz: 70817ffbf340daa66078abf00b427412e6bec84b8257c4fd5d1f5fa30ed200718f2b6bd73c81c72b8dc58d7f1c520ed95c890080b6c91e615d0e3054ad7aa353
|
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -104,10 +104,6 @@ GEM
|
|
104
104
|
rake (>= 0.8.7)
|
105
105
|
thor (>= 0.18.1, < 2.0)
|
106
106
|
rake (10.4.2)
|
107
|
-
rspec (3.1.0)
|
108
|
-
rspec-core (~> 3.1.0)
|
109
|
-
rspec-expectations (~> 3.1.0)
|
110
|
-
rspec-mocks (~> 3.1.0)
|
111
107
|
rspec-core (3.1.7)
|
112
108
|
rspec-support (~> 3.1.0)
|
113
109
|
rspec-expectations (3.1.2)
|
@@ -146,7 +142,6 @@ DEPENDENCIES
|
|
146
142
|
factory_girl_rails
|
147
143
|
pry
|
148
144
|
rails
|
149
|
-
rspec
|
150
145
|
rspec-rails
|
151
146
|
sqlite3
|
152
147
|
|
data/README.md
CHANGED
@@ -7,21 +7,79 @@ open to significant modification.
|
|
7
7
|
|
8
8
|
Authenticate is inspired by, and draws from, Devise, Warden, Authlogic, Clearance, Sorcery, and restful_authentication.
|
9
9
|
|
10
|
+
Please use [GitHub Issues] to report bugs.
|
11
|
+
|
12
|
+
[GitHub Issues]: https://github.com/tomichj/authenticate/issues
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
## Philosophy
|
17
|
+
|
18
|
+
* simple - Authenticate's code is straightforward and easy to read.
|
19
|
+
* opinionated - set the "right" defaults, but let you control almost everything if you want
|
20
|
+
* small footprint - as few public methods and modules as possible
|
21
|
+
* configuration driven - almost all configuration is performed in the initializer
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
## Implementation Overview
|
26
|
+
|
27
|
+
Authenticate:
|
28
|
+
* loads modules into your user model to provide authentication functionality
|
29
|
+
* loads `callbacks` that are triggered during authentication and access events. All authentication
|
30
|
+
decisions are performed in callbacks, e.g. do you have a valid session, has your session timed out, etc.
|
31
|
+
* loads a module into your controllers (typically application controller) to secure controller actions
|
32
|
+
|
33
|
+
The callback architecture is based on the system used by devise and warden, but significantly simplified.
|
34
|
+
|
35
|
+
|
36
|
+
### Session Token
|
37
|
+
|
38
|
+
Authenticate generates and clears a token (called a 'session token') to identify the user from a saved cookie.
|
39
|
+
When a user authenticates successfully, Authenticate generates and stores a 'session token' for your user in
|
40
|
+
your database. The session token is also stored in a cookie in the user's browser.
|
41
|
+
The cookie is then presented upon each subsequent access attempt to your server.
|
42
|
+
|
43
|
+
### User Model
|
44
|
+
|
45
|
+
|
46
|
+
|
10
47
|
|
11
48
|
## Install
|
12
49
|
|
13
|
-
|
50
|
+
To get started, add Authenticate to your `Gemfile`:
|
14
51
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
52
|
+
```ruby
|
53
|
+
gem 'authenticate'
|
54
|
+
```
|
55
|
+
|
56
|
+
Then run:
|
57
|
+
|
58
|
+
```sh
|
59
|
+
bundle install
|
60
|
+
```
|
61
|
+
|
62
|
+
Then run the installation generator:
|
63
|
+
|
64
|
+
```sh
|
65
|
+
rails generate authenticate:install
|
66
|
+
```
|
67
|
+
|
68
|
+
The generator does the following:
|
69
|
+
|
70
|
+
* Insert `include Authenticate::User` into your `User` model.
|
71
|
+
* Insert `include Authenticate::Controller` into your `ApplicationController`
|
72
|
+
* Add an initializer at `config/intializers/authenticate.rb`.
|
73
|
+
* Create migrations to either create a users table or add additional columns to :user. A primary migration is added,
|
74
|
+
'create users' or 'add_authenticate_to_users'. This migration is required. Two additonal migrations are created
|
75
|
+
to support the 'brute_force' and 'timeoutable' modules. You may delete the brute_force and timeoutable migrations,
|
76
|
+
but those migrations are required if you use those Authenticate features (see Configure, next).
|
77
|
+
|
78
|
+
Finally, you'll need to run the migrations that Authenticate just generated:
|
79
|
+
|
80
|
+
```sh
|
81
|
+
rake db:migrate
|
82
|
+
```
|
25
83
|
|
26
84
|
|
27
85
|
## Configure
|
@@ -30,18 +88,22 @@ Override any of these defaults in your application `config/initializers/authenti
|
|
30
88
|
|
31
89
|
```ruby
|
32
90
|
Authenticate.configure do |config|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
91
|
+
config.user_model = 'User'
|
92
|
+
config.cookie_name = 'authenticate_session_token'
|
93
|
+
config.cookie_expiration = { 1.year.from_now.utc }
|
94
|
+
config.cookie_domain = nil
|
95
|
+
config.cookie_path = '/
|
96
|
+
config.secure_cookie = false
|
97
|
+
config.http_only = false
|
98
|
+
config.crypto_provider = Bcrypt
|
99
|
+
config.timeout_in = nil # 45.minutes
|
100
|
+
config.max_session_lifetime = nil # 8.hours
|
101
|
+
config.max_consecutive_bad_logins_allowed = nil # 5
|
102
|
+
config.bad_login_lockout_period = nil # 5.minutes
|
103
|
+
config.authentication_strategy = :email
|
43
104
|
```
|
44
105
|
|
106
|
+
Configuration parameters are described in detail here: [Configuration](lib/authenticate/configuration.rb)
|
45
107
|
|
46
108
|
|
47
109
|
### timeout_in
|
@@ -53,7 +115,6 @@ If the interval between the current access time and the last access time is grea
|
|
53
115
|
the session is invalidated. The user will be prompted for authentication again.
|
54
116
|
|
55
117
|
|
56
|
-
|
57
118
|
### max_session_lifetime
|
58
119
|
|
59
120
|
* max_session_lifetime: the maximum interval a session is valid, regardless of user activity.
|
@@ -63,7 +124,6 @@ max_session_lifetime. The user session is invalidated and the next access will w
|
|
63
124
|
authentication again.
|
64
125
|
|
65
126
|
|
66
|
-
|
67
127
|
### max_consecutive_bad_logins_allowed & bad_login_lockout_period
|
68
128
|
|
69
129
|
* max_consecutive_bad_logins_allowed: an integer
|
@@ -74,7 +134,6 @@ The user's consecutive bad logins will be tracked, and if they exceed the allowe
|
|
74
134
|
will be locked. The lock will last `bad_login_lockout_period`, which can be any time period (e.g. `10.minutes`).
|
75
135
|
|
76
136
|
|
77
|
-
|
78
137
|
### authentication_strategy
|
79
138
|
|
80
139
|
The default authentication strategy is :email. This requires that your User model have an attribute named `email`.
|
@@ -85,50 +144,18 @@ You may instead opt for :username. The username strategy will identify users wit
|
|
85
144
|
The strategy will also add username attribute validation, ensuring the username exists and is unique.
|
86
145
|
|
87
146
|
|
147
|
+
|
88
148
|
## Use
|
89
149
|
|
90
150
|
### Authentication
|
91
151
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
`params[:session][:email]` and `params[:session][:password]` are required for the :email authentication
|
96
|
-
strategy. `params[:session][:username]` and `params[:session][:password]` are required for
|
97
|
-
the :username authentication strategy.
|
98
|
-
|
99
|
-
* login(user, &block) - log in the just-authenticated user. Login will run all rules as provided in the configuration,
|
100
|
-
such as timeout_in detection, max_session_lifetime, etc. You can provide a block to this method to handle the result.
|
101
|
-
Your block will receive either {SuccessStatus} or {FailureStatus}.
|
102
|
-
|
103
|
-
An example session controller:
|
152
|
+
Authenticate provides a session controller and views to authenticate users. After successful authentication,
|
153
|
+
the user is redirected to the path they attempted to access, or as specified by the `redirect_url` property
|
154
|
+
in your configuration. This defaults to '/' but can customized:
|
104
155
|
|
105
156
|
```ruby
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
def create
|
110
|
-
user = authenticate(params)
|
111
|
-
login(user) do |status|
|
112
|
-
if status.success?
|
113
|
-
flash[:notice] = 'You successfully logged in! Very nice.'
|
114
|
-
logger.info flash[:notice].inspect
|
115
|
-
redirect_to '/'
|
116
|
-
else
|
117
|
-
flash[:notice] = status.message
|
118
|
-
logger.info flash[:notice].inspect
|
119
|
-
render template: 'sessions/new', status: :unauthorized
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
|
125
|
-
def new
|
126
|
-
end
|
127
|
-
|
128
|
-
def destroy
|
129
|
-
logout
|
130
|
-
redirect_to '/', notice: 'You logged out successfully'
|
131
|
-
end
|
157
|
+
Authenticate.configure do |config|
|
158
|
+
config.redirect_url = '/specials'
|
132
159
|
end
|
133
160
|
```
|
134
161
|
|
@@ -153,7 +180,7 @@ Example:
|
|
153
180
|
```erb
|
154
181
|
<% if authenticated? %>
|
155
182
|
<%= current_user.email %>
|
156
|
-
<%=
|
183
|
+
<%= link_to "Sign out", sign_out_path %>
|
157
184
|
<% else %>
|
158
185
|
<%= link_to "Sign in", sign_in_path %>
|
159
186
|
<% end %>
|
@@ -173,23 +200,64 @@ end
|
|
173
200
|
```
|
174
201
|
|
175
202
|
|
203
|
+
## Overriding Authenticate
|
204
|
+
|
205
|
+
### Views
|
206
|
+
|
207
|
+
You can quickly get started with a rails application using the built-in views. See [app/views](/app/views) for
|
208
|
+
the default views. When you want to customize an Authenticate view, create your own copy of it in your app.
|
209
|
+
|
210
|
+
You can use the Authenticate view generator to copy the default views into your application:
|
211
|
+
|
212
|
+
```sh
|
213
|
+
$ rails generate authenticate:views
|
214
|
+
```
|
215
|
+
|
216
|
+
|
217
|
+
### Controllers
|
218
|
+
|
219
|
+
If the customization at the views level is not enough, you can customize each controller, and the
|
220
|
+
authenticate mailer. See [app/controllers](/app/controllers) for the default controllers, and
|
221
|
+
[app/mailers](/app/mailers) for the default mailer.
|
222
|
+
|
223
|
+
You can use the Authenticate controller generator to copy the default controllers and mailer into your application:
|
224
|
+
|
225
|
+
```sh
|
226
|
+
$ rails generate authenticate:controllers
|
227
|
+
```
|
228
|
+
|
229
|
+
|
230
|
+
### Routes
|
231
|
+
|
232
|
+
Authenticate adds routes. See [config/routes.rb](/config/routes.rb) for the default routes.
|
233
|
+
|
234
|
+
If you want to control and customizer the routes, you can turn off the built-in routes in
|
235
|
+
the Authenticate configuration with `config.routes = false`.
|
236
|
+
|
237
|
+
You can optionally run a generator to dump a copy of the default routes into your application for modification.
|
238
|
+
|
239
|
+
```sh
|
240
|
+
$ rails generate authenticate:routes
|
241
|
+
```
|
242
|
+
|
243
|
+
|
176
244
|
## Extending Authenticate
|
177
245
|
|
178
|
-
Authenticate can be extended with two mechanisms:
|
246
|
+
Authenticate can be further extended with two mechanisms:
|
179
247
|
|
180
248
|
* user modules: add behavior to the user model
|
181
|
-
* callbacks: add
|
182
|
-
|
249
|
+
* callbacks: add behavior during various authentication events, such as login and subsequent hits
|
183
250
|
|
184
251
|
|
185
252
|
### User Modules
|
186
253
|
|
187
|
-
Add behavior to your User model for your callbacks to use.
|
188
|
-
|
254
|
+
Add behavior to your User model for your callbacks to use. You can, of course, incldue behavrio yourself directly
|
255
|
+
in your User class, but you can also use the Authenticate module loading system.
|
256
|
+
|
257
|
+
To add a custom module to Authenticate, e.g. `MyUserModule`:
|
189
258
|
|
190
|
-
Example:
|
191
259
|
```ruby
|
192
|
-
Authenticate.
|
260
|
+
Authenticate.configuration do |config|
|
193
261
|
config.modules = [MyUserModule]
|
194
262
|
end
|
195
263
|
```
|
@@ -197,38 +265,41 @@ end
|
|
197
265
|
|
198
266
|
### Callbacks
|
199
267
|
|
200
|
-
Callbacks can be added
|
268
|
+
Callbacks can be added to Authenticate. Use `Authenticate.lifecycle.after_set_user` or
|
269
|
+
`Authenticate.lifecycle.after_authentication`. See [Lifecycle](lib/authenticate/lifecycle.rb) for full details.
|
201
270
|
|
202
|
-
Callbacks can `throw(:failure, message)` to signal an authentication/authorization failure
|
271
|
+
Callbacks can `throw(:failure, message)` to signal an authentication/authorization failure. Callbacks can also perform
|
203
272
|
actions on the user or session. Callbacks are passed a block at runtime of `|user, session, options|`.
|
204
273
|
|
205
|
-
|
206
|
-
Example that counts logins for users. It consists of a module for User, and a callback that is
|
274
|
+
Here's an example that counts logins for users. It consists of a module for User, and a callback that is
|
207
275
|
set in the `included` block. The callback is then added to the User module via the Authenticate configuration.
|
208
276
|
|
209
277
|
```ruby
|
278
|
+
# app/models/concerns/login_count.rb
|
210
279
|
module LoginCount
|
211
280
|
extend ActiveSupport::Concern
|
212
281
|
|
213
|
-
included do
|
214
|
-
# authentication
|
282
|
+
included do
|
283
|
+
# Add a callback that is triggered after every authentication
|
215
284
|
Authenticate.lifecycle.after_authentication name:'login counter' do |user, session, options|
|
216
285
|
user.count_login if user
|
217
286
|
end
|
218
287
|
end
|
219
288
|
|
220
289
|
def count_login
|
290
|
+
self.login_count ||= 0
|
221
291
|
self.login_counter += 1
|
222
292
|
end
|
223
293
|
end
|
224
294
|
|
225
|
-
|
295
|
+
# config/initializers/authenticate.rb
|
296
|
+
# You could also just `include LoginCount` in your user model.
|
297
|
+
Authenticate.configuration do |config|
|
226
298
|
config.modules = [LoginCount]
|
227
299
|
end
|
228
300
|
```
|
229
301
|
|
230
302
|
|
231
|
-
|
232
303
|
## Testing
|
233
304
|
|
234
305
|
Authenticate has been tested with rails 4.2, other versions to follow.
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# Request password change via an emailed link with a unique token.
|
2
|
+
# Thanks to devise and Clearance.
|
3
|
+
class Authenticate::PasswordsController < ApplicationController
|
4
|
+
skip_before_action :require_authentication, only: [:create, :edit, :new, :update], raise: false
|
5
|
+
before_action :ensure_existing_user, only: [:edit, :update]
|
6
|
+
|
7
|
+
# Display screen to request a password change email.
|
8
|
+
# GET /users/passwords/new
|
9
|
+
def new
|
10
|
+
render template: 'passwords/new'
|
11
|
+
end
|
12
|
+
|
13
|
+
# Send password change email.
|
14
|
+
#
|
15
|
+
# POST /users/password
|
16
|
+
def create
|
17
|
+
if user = find_user_for_create
|
18
|
+
user.forgot_password!
|
19
|
+
deliver_email(user)
|
20
|
+
end
|
21
|
+
redirect_to sign_in_path, notice: flash_create_description
|
22
|
+
end
|
23
|
+
|
24
|
+
# Screen to enter your new password.
|
25
|
+
#
|
26
|
+
# GET /users/passwords/3/edit?token=abcdef
|
27
|
+
def edit
|
28
|
+
@user = find_user_for_edit
|
29
|
+
if !@user.reset_password_period_valid?
|
30
|
+
redirect_to sign_in_path, notice: flash_failure_token_expired
|
31
|
+
else
|
32
|
+
render template: 'passwords/edit'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Save the new password entered in #edit.
|
37
|
+
#
|
38
|
+
# PUT /users/passwords/3/
|
39
|
+
def update
|
40
|
+
@user = find_user_for_update
|
41
|
+
|
42
|
+
if !@user.reset_password_period_valid?
|
43
|
+
redirect_to sign_in_path, notice: flash_failure_token_expired
|
44
|
+
elsif @user.update_password password_reset_params
|
45
|
+
login @user
|
46
|
+
redirect_to url_after_update, notice: flash_success_password_changed
|
47
|
+
else
|
48
|
+
# failed to update password for some reason
|
49
|
+
flash.now[:notice] = flash_failure_after_update
|
50
|
+
render template: 'passwords/edit'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def deliver_email(user)
|
57
|
+
mail = ::AuthenticateMailer.change_password(user)
|
58
|
+
|
59
|
+
if Gem::Version.new(Rails::VERSION::STRING) >= Gem::Version.new('4.2.0')
|
60
|
+
mail.deliver_later
|
61
|
+
else
|
62
|
+
mail.deliver
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def password_reset_params
|
67
|
+
params[:password_reset][:password]
|
68
|
+
end
|
69
|
+
|
70
|
+
def find_user_for_create
|
71
|
+
Authenticate.configuration.user_model_class.find_by_email params[:password][:email]
|
72
|
+
end
|
73
|
+
|
74
|
+
def find_user_for_edit
|
75
|
+
find_user_by_id_and_password_reset_token
|
76
|
+
end
|
77
|
+
|
78
|
+
def find_user_for_update
|
79
|
+
find_user_by_id_and_password_reset_token
|
80
|
+
end
|
81
|
+
|
82
|
+
def ensure_existing_user
|
83
|
+
unless find_user_by_id_and_password_reset_token
|
84
|
+
flash.now[:notice] = flash_failure_when_forbidden
|
85
|
+
render template: 'passwords/new'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def find_user_by_id_and_password_reset_token
|
90
|
+
Authenticate.configuration.user_model_class.where(id: params[:id], password_reset_token: params[:token].to_s).first
|
91
|
+
end
|
92
|
+
|
93
|
+
def flash_create_description
|
94
|
+
translate(:description,
|
95
|
+
scope: [:Authenticate, :controllers, :passwords],
|
96
|
+
default: t('passwords.create.description'))
|
97
|
+
end
|
98
|
+
|
99
|
+
def flash_success_password_changed
|
100
|
+
translate(:success_password_changed,
|
101
|
+
scope: [:Authenticate, :controllers, :passwords],
|
102
|
+
default: t('flashes.success_password_changed'))
|
103
|
+
end
|
104
|
+
|
105
|
+
def flash_failure_token_expired
|
106
|
+
translate(:failure_token_expired,
|
107
|
+
scope: [:Authenticate, :controllers, :passwords],
|
108
|
+
default: t('flashes.failure_token_expired'))
|
109
|
+
end
|
110
|
+
|
111
|
+
def flash_failure_when_forbidden
|
112
|
+
translate(:forbidden,
|
113
|
+
scope: [:Authenticate, :controllers, :passwords],
|
114
|
+
default: t('flashes.failure_when_forbidden'))
|
115
|
+
end
|
116
|
+
|
117
|
+
def flash_failure_after_update
|
118
|
+
translate(:blank_password,
|
119
|
+
scope: [:Authenticate, :controllers, :passwords],
|
120
|
+
default: t('flashes.failure_after_update'))
|
121
|
+
end
|
122
|
+
|
123
|
+
def url_after_create
|
124
|
+
sign_in_url
|
125
|
+
end
|
126
|
+
|
127
|
+
def url_after_update
|
128
|
+
Authenticate.configuration.redirect_url
|
129
|
+
end
|
130
|
+
end
|