devise_token_auth 0.1.43 → 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.
Potentially problematic release.
This version of devise_token_auth might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +40 -894
- data/Rakefile +2 -0
- data/app/controllers/devise_token_auth/application_controller.rb +6 -0
- data/app/controllers/devise_token_auth/concerns/resource_finder.rb +2 -0
- data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +9 -14
- data/app/controllers/devise_token_auth/confirmations_controller.rb +3 -1
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +2 -0
- data/app/controllers/devise_token_auth/passwords_controller.rb +8 -14
- data/app/controllers/devise_token_auth/registrations_controller.rb +26 -21
- data/app/controllers/devise_token_auth/sessions_controller.rb +2 -0
- data/app/controllers/devise_token_auth/token_validations_controller.rb +2 -0
- data/app/controllers/devise_token_auth/unlocks_controller.rb +2 -0
- data/app/models/devise_token_auth/concerns/user.rb +41 -16
- data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +2 -0
- data/app/validators/email_validator.rb +3 -1
- data/config/initializers/devise.rb +2 -0
- data/config/locales/da-DK.yml +1 -1
- data/config/locales/sv.yml +50 -0
- data/lib/devise_token_auth.rb +3 -0
- data/lib/devise_token_auth/controllers/helpers.rb +2 -0
- data/lib/devise_token_auth/controllers/url_helpers.rb +2 -0
- data/lib/devise_token_auth/engine.rb +2 -0
- data/lib/devise_token_auth/errors.rb +7 -0
- data/lib/devise_token_auth/rails/routes.rb +2 -0
- data/lib/devise_token_auth/url.rb +2 -0
- data/lib/devise_token_auth/version.rb +3 -1
- data/lib/generators/devise_token_auth/USAGE +1 -1
- data/lib/generators/devise_token_auth/install_generator.rb +7 -5
- data/lib/generators/devise_token_auth/install_views_generator.rb +2 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +2 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +8 -7
- data/lib/generators/devise_token_auth/templates/user.rb +3 -1
- data/lib/tasks/devise_token_auth_tasks.rake +2 -0
- data/test/controllers/custom/custom_confirmations_controller_test.rb +2 -0
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +2 -0
- data/test/controllers/custom/custom_passwords_controller_test.rb +2 -0
- data/test/controllers/custom/custom_registrations_controller_test.rb +11 -0
- data/test/controllers/custom/custom_sessions_controller_test.rb +2 -0
- data/test/controllers/custom/custom_token_validations_controller_test.rb +2 -0
- data/test/controllers/demo_group_controller_test.rb +2 -0
- data/test/controllers/demo_mang_controller_test.rb +4 -1
- data/test/controllers/demo_user_controller_test.rb +47 -10
- data/test/controllers/devise_token_auth/confirmations_controller_test.rb +4 -6
- data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +7 -4
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +2 -0
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +3 -1
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +52 -0
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +2 -0
- data/test/controllers/devise_token_auth/unlocks_controller_test.rb +2 -0
- data/test/controllers/overrides/confirmations_controller_test.rb +2 -0
- data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +2 -0
- data/test/controllers/overrides/passwords_controller_test.rb +2 -0
- data/test/controllers/overrides/registrations_controller_test.rb +31 -27
- data/test/controllers/overrides/sessions_controller_test.rb +2 -0
- data/test/controllers/overrides/token_validations_controller_test.rb +2 -0
- data/test/dummy/app/controllers/application_controller.rb +2 -0
- data/test/dummy/app/controllers/auth_origin_controller.rb +2 -0
- data/test/dummy/app/controllers/custom/confirmations_controller.rb +2 -0
- data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +2 -0
- data/test/dummy/app/controllers/custom/passwords_controller.rb +2 -0
- data/test/dummy/app/controllers/custom/registrations_controller.rb +2 -1
- data/test/dummy/app/controllers/custom/sessions_controller.rb +2 -0
- data/test/dummy/app/controllers/custom/token_validations_controller.rb +2 -0
- data/test/dummy/app/controllers/demo_group_controller.rb +2 -0
- data/test/dummy/app/controllers/demo_mang_controller.rb +2 -0
- data/test/dummy/app/controllers/demo_user_controller.rb +2 -0
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +2 -0
- data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +2 -0
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +2 -0
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +2 -0
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +2 -0
- data/test/dummy/app/controllers/overrides/token_validations_controller.rb +2 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/evil_user.rb +2 -0
- data/test/dummy/app/models/lockable_user.rb +2 -0
- data/test/dummy/app/models/mang.rb +2 -0
- data/test/dummy/app/models/nice_user.rb +2 -0
- data/test/dummy/app/models/only_email_user.rb +2 -0
- data/test/dummy/app/models/scoped_user.rb +2 -0
- data/test/dummy/app/models/unconfirmable_user.rb +2 -0
- data/test/dummy/app/models/unregisterable_user.rb +2 -0
- data/test/dummy/app/models/user.rb +2 -0
- data/test/dummy/config/application.rb +2 -0
- data/test/dummy/config/boot.rb +2 -0
- data/test/dummy/config/environment.rb +2 -0
- data/test/dummy/config/environments/development.rb +2 -0
- data/test/dummy/config/environments/production.rb +2 -0
- data/test/dummy/config/environments/test.rb +2 -0
- data/test/dummy/config/initializers/assets.rb +2 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +2 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -1
- data/test/dummy/config/initializers/devise.rb +2 -0
- data/test/dummy/config/initializers/devise_token_auth.rb +2 -0
- data/test/dummy/config/initializers/figaro.rb +2 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +2 -0
- data/test/dummy/config/initializers/inflections.rb +2 -0
- data/test/dummy/config/initializers/mime_types.rb +2 -0
- data/test/dummy/config/initializers/omniauth.rb +2 -0
- data/test/dummy/config/initializers/session_store.rb +2 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +2 -0
- data/test/dummy/config/routes.rb +2 -0
- data/test/dummy/config/spring.rb +2 -0
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +2 -0
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +2 -0
- data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +2 -0
- data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +2 -0
- data/test/dummy/db/migrate/20140928231203_devise_token_auth_create_evil_users.rb +2 -0
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +2 -0
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +2 -0
- data/test/dummy/db/migrate/20150409095712_devise_token_auth_create_nice_users.rb +2 -0
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +2 -0
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +2 -0
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +2 -0
- data/test/dummy/lib/migration_database_helper.rb +15 -1
- data/test/dummy/tmp/generators/app/models/user.rb +5 -5
- data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +2 -0
- data/test/dummy/tmp/generators/db/migrate/{20171014052631_devise_token_auth_create_users.rb → 20180805205504_devise_token_auth_create_users.rb} +1 -0
- data/test/integration/navigation_test.rb +2 -0
- data/test/lib/devise_token_auth/url_test.rb +2 -0
- data/test/lib/generators/devise_token_auth/install_generator_test.rb +2 -0
- data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +194 -0
- data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +2 -0
- data/test/models/only_email_user_test.rb +2 -0
- data/test/models/user_test.rb +6 -4
- data/test/test_helper.rb +30 -14
- metadata +23 -5
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeviseTokenAuth
|
2
4
|
class ApplicationController < DeviseController
|
3
5
|
include DeviseTokenAuth::Concerns::SetUserByToken
|
@@ -17,6 +19,10 @@ module DeviseTokenAuth
|
|
17
19
|
|
18
20
|
protected
|
19
21
|
|
22
|
+
def blacklisted_redirect_url?
|
23
|
+
DeviseTokenAuth.redirect_whitelist && !DeviseTokenAuth::Url.whitelisted?(@redirect_url)
|
24
|
+
end
|
25
|
+
|
20
26
|
def build_redirect_headers(access_token, client, redirect_header_options = {})
|
21
27
|
{
|
22
28
|
DeviseTokenAuth.headers_names[:"access-token"] => access_token,
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeviseTokenAuth::Concerns::SetUserByToken
|
2
4
|
extend ActiveSupport::Concern
|
3
5
|
include DeviseTokenAuth::Concerns::ResourceFinder
|
@@ -11,7 +13,7 @@ module DeviseTokenAuth::Concerns::SetUserByToken
|
|
11
13
|
|
12
14
|
# keep track of request duration
|
13
15
|
def set_request_start
|
14
|
-
@request_started_at = Time.now
|
16
|
+
@request_started_at = Time.zone.now
|
15
17
|
@used_auth_by_token = true
|
16
18
|
|
17
19
|
# initialize instance variables
|
@@ -60,7 +62,9 @@ module DeviseTokenAuth::Concerns::SetUserByToken
|
|
60
62
|
if devise_warden_user && devise_warden_user.tokens[@client_id].nil?
|
61
63
|
@used_auth_by_token = false
|
62
64
|
@resource = devise_warden_user
|
63
|
-
|
65
|
+
# REVIEW: The following line _should_ be safe to remove;
|
66
|
+
# the generated token does not get used anywhere.
|
67
|
+
# @resource.create_new_auth_token
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
@@ -131,22 +135,13 @@ module DeviseTokenAuth::Concerns::SetUserByToken
|
|
131
135
|
if @is_batch_request
|
132
136
|
auth_header = @resource.extend_batch_buffer(@token, @client_id)
|
133
137
|
|
134
|
-
# Do not return token for batch requests to avoid invalidated
|
135
|
-
# tokens returned to the client in case of race conditions.
|
136
|
-
# Use a blank string for the header to still be present and
|
137
|
-
# being passed in a XHR response in case of
|
138
|
-
# 304 Not Modified responses.
|
139
|
-
auth_header[DeviseTokenAuth.headers_names[:"access-token"]] = ' '
|
140
|
-
auth_header[DeviseTokenAuth.headers_names[:"expiry"]] = ' '
|
141
|
-
|
142
138
|
# update Authorization response header with new token
|
143
139
|
else
|
144
140
|
auth_header = @resource.create_new_auth_token(@client_id)
|
145
|
-
end
|
146
|
-
|
147
|
-
# update the response header
|
148
|
-
response.headers.merge!(auth_header)
|
149
141
|
|
142
|
+
# update the response header
|
143
|
+
response.headers.merge!(auth_header)
|
144
|
+
end
|
150
145
|
end # end lock
|
151
146
|
end # end ensure_pristine_resource
|
152
147
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeviseTokenAuth
|
2
4
|
class ConfirmationsController < DeviseTokenAuth::ApplicationController
|
3
5
|
def show
|
@@ -6,7 +8,7 @@ module DeviseTokenAuth
|
|
6
8
|
if @resource && @resource.id
|
7
9
|
expiry = nil
|
8
10
|
if defined?(@resource.sign_in_count) && @resource.sign_in_count > 0
|
9
|
-
expiry = (Time.now + 1.second).to_i
|
11
|
+
expiry = (Time.zone.now + 1.second).to_i
|
10
12
|
end
|
11
13
|
|
12
14
|
client_id, token = @resource.create_token expiry: expiry
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeviseTokenAuth
|
2
4
|
class PasswordsController < DeviseTokenAuth::ApplicationController
|
3
5
|
before_action :set_user_by_token, :only => [:update]
|
@@ -11,21 +13,13 @@ module DeviseTokenAuth
|
|
11
13
|
end
|
12
14
|
|
13
15
|
# give redirect value from params priority
|
14
|
-
@redirect_url = params
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
unless @redirect_url
|
20
|
-
return render_create_error_missing_redirect_url
|
21
|
-
end
|
16
|
+
@redirect_url = params.fetch(
|
17
|
+
:redirect_url,
|
18
|
+
DeviseTokenAuth.default_password_reset_url
|
19
|
+
)
|
22
20
|
|
23
|
-
|
24
|
-
if
|
25
|
-
unless DeviseTokenAuth::Url.whitelisted?(@redirect_url)
|
26
|
-
return render_create_error_not_allowed_redirect_url
|
27
|
-
end
|
28
|
-
end
|
21
|
+
return render_create_error_missing_redirect_url unless @redirect_url
|
22
|
+
return render_create_error_not_allowed_redirect_url if blacklisted_redirect_url?
|
29
23
|
|
30
24
|
@email = get_case_insensitive_field_from_resource_params(:email)
|
31
25
|
@resource = find_resource(:uid, @email)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeviseTokenAuth
|
2
4
|
class RegistrationsController < DeviseTokenAuth::ApplicationController
|
3
5
|
before_action :set_user_by_token, only: [:destroy, :update]
|
@@ -6,21 +8,18 @@ module DeviseTokenAuth
|
|
6
8
|
skip_after_action :update_auth_header, only: [:create, :destroy]
|
7
9
|
|
8
10
|
def create
|
9
|
-
|
10
|
-
@resource.provider = provider
|
11
|
+
build_resource
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
else
|
16
|
-
@resource.email = sign_up_params[:email]
|
13
|
+
unless @resource.present?
|
14
|
+
raise DeviseTokenAuth::Errors::NoResourceDefinedError,
|
15
|
+
"#{self.class.name} #build_resource does not define @resource, execution stopped"
|
17
16
|
end
|
18
17
|
|
19
18
|
# give redirect value from params priority
|
20
|
-
@redirect_url =
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
@redirect_url = params.fetch(
|
20
|
+
:confirm_success_url,
|
21
|
+
DeviseTokenAuth.default_confirm_success_url
|
22
|
+
)
|
24
23
|
|
25
24
|
# success redirect url is required
|
26
25
|
if confirmable_enabled? && !@redirect_url
|
@@ -28,20 +27,18 @@ module DeviseTokenAuth
|
|
28
27
|
end
|
29
28
|
|
30
29
|
# if whitelist is set, validate redirect_url against whitelist
|
31
|
-
if
|
32
|
-
unless DeviseTokenAuth::Url.whitelisted?(@redirect_url)
|
33
|
-
return render_create_error_redirect_url_not_allowed
|
34
|
-
end
|
35
|
-
end
|
30
|
+
return render_create_error_redirect_url_not_allowed if blacklisted_redirect_url?
|
36
31
|
|
37
32
|
begin
|
38
33
|
# override email confirmation, must be sent manually from ctrl
|
39
34
|
resource_class.set_callback("create", :after, :send_on_create_confirmation_instructions)
|
40
35
|
resource_class.skip_callback("create", :after, :send_on_create_confirmation_instructions)
|
36
|
+
|
41
37
|
if @resource.respond_to? :skip_confirmation_notification!
|
42
38
|
# Fix duplicate e-mails by disabling Devise confirmation e-mail
|
43
39
|
@resource.skip_confirmation_notification!
|
44
40
|
end
|
41
|
+
|
45
42
|
if @resource.save
|
46
43
|
yield @resource if block_given?
|
47
44
|
|
@@ -51,13 +48,10 @@ module DeviseTokenAuth
|
|
51
48
|
client_config: params[:config_name],
|
52
49
|
redirect_url: @redirect_url
|
53
50
|
})
|
54
|
-
|
55
51
|
else
|
56
52
|
# email auth has been bypassed, authenticate user
|
57
53
|
@client_id, @token = @resource.create_token
|
58
|
-
|
59
54
|
@resource.save!
|
60
|
-
|
61
55
|
update_auth_header
|
62
56
|
end
|
63
57
|
render_create_success
|
@@ -88,7 +82,6 @@ module DeviseTokenAuth
|
|
88
82
|
if @resource
|
89
83
|
@resource.destroy
|
90
84
|
yield @resource if block_given?
|
91
|
-
|
92
85
|
render_destroy_success
|
93
86
|
else
|
94
87
|
render_destroy_error
|
@@ -96,7 +89,7 @@ module DeviseTokenAuth
|
|
96
89
|
end
|
97
90
|
|
98
91
|
def sign_up_params
|
99
|
-
params.permit(
|
92
|
+
params.permit(*params_for_resource(:sign_up))
|
100
93
|
end
|
101
94
|
|
102
95
|
def account_update_params
|
@@ -105,6 +98,18 @@ module DeviseTokenAuth
|
|
105
98
|
|
106
99
|
protected
|
107
100
|
|
101
|
+
def build_resource
|
102
|
+
@resource = resource_class.new(sign_up_params)
|
103
|
+
@resource.provider = provider
|
104
|
+
|
105
|
+
# honor devise configuration for case_insensitive_keys
|
106
|
+
if resource_class.case_insensitive_keys.include?(:email)
|
107
|
+
@resource.email = sign_up_params[:email].try(:downcase)
|
108
|
+
else
|
109
|
+
@resource.email = sign_up_params[:email]
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
108
113
|
def render_create_error_missing_confirm_success_url
|
109
114
|
response = {
|
110
115
|
status: 'error',
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'bcrypt'
|
2
4
|
|
3
5
|
module DeviseTokenAuth::Concerns::User
|
@@ -91,13 +93,15 @@ module DeviseTokenAuth::Concerns::User
|
|
91
93
|
def create_token(client_id: nil, token: nil, expiry: nil, **token_extras)
|
92
94
|
client_id ||= SecureRandom.urlsafe_base64(nil, false)
|
93
95
|
token ||= SecureRandom.urlsafe_base64(nil, false)
|
94
|
-
expiry ||= (Time.now + token_lifespan).to_i
|
96
|
+
expiry ||= (Time.zone.now + token_lifespan).to_i
|
95
97
|
|
96
98
|
self.tokens[client_id] = {
|
97
99
|
token: BCrypt::Password.create(token),
|
98
100
|
expiry: expiry
|
99
101
|
}.merge!(token_extras)
|
100
102
|
|
103
|
+
clean_old_tokens
|
104
|
+
|
101
105
|
[client_id, token, expiry]
|
102
106
|
end
|
103
107
|
|
@@ -139,7 +143,7 @@ module DeviseTokenAuth::Concerns::User
|
|
139
143
|
expiry && token &&
|
140
144
|
|
141
145
|
# ensure that the token has not yet expired
|
142
|
-
DateTime.strptime(expiry.to_s, '%s') > Time.now &&
|
146
|
+
DateTime.strptime(expiry.to_s, '%s') > Time.zone.now &&
|
143
147
|
|
144
148
|
# ensure that the token is valid
|
145
149
|
DeviseTokenAuth::Concerns::User.tokens_match?(token_hash, token)
|
@@ -158,7 +162,7 @@ module DeviseTokenAuth::Concerns::User
|
|
158
162
|
updated_at && last_token &&
|
159
163
|
|
160
164
|
# ensure that previous token falls within the batch buffer throttle time of the last request
|
161
|
-
Time.parse(updated_at) > Time.now - DeviseTokenAuth.batch_request_buffer_throttle &&
|
165
|
+
Time.parse(updated_at) > Time.zone.now - DeviseTokenAuth.batch_request_buffer_throttle &&
|
162
166
|
|
163
167
|
# ensure that the token is valid
|
164
168
|
::BCrypt::Password.new(last_token) == token
|
@@ -168,7 +172,7 @@ module DeviseTokenAuth::Concerns::User
|
|
168
172
|
|
169
173
|
# update user's auth token (should happen on each request)
|
170
174
|
def create_new_auth_token(client_id=nil)
|
171
|
-
now = Time.now
|
175
|
+
now = Time.zone.now
|
172
176
|
|
173
177
|
client_id, token = create_token(
|
174
178
|
client_id: client_id,
|
@@ -196,17 +200,12 @@ module DeviseTokenAuth::Concerns::User
|
|
196
200
|
|
197
201
|
def update_auth_header(token, client_id='default')
|
198
202
|
headers = build_auth_header(token, client_id)
|
199
|
-
|
200
|
-
oldest_client_id, _tk = tokens.min_by { |_cid, v| v[:expiry] || v["expiry"] }
|
201
|
-
tokens.delete(oldest_client_id)
|
202
|
-
end
|
203
|
-
|
203
|
+
clean_old_tokens
|
204
204
|
save!
|
205
205
|
|
206
206
|
headers
|
207
207
|
end
|
208
208
|
|
209
|
-
|
210
209
|
def build_auth_url(base_url, args)
|
211
210
|
args[:uid] = uid
|
212
211
|
args[:expiry] = tokens[args[:client_id]]['expiry']
|
@@ -214,9 +213,8 @@ module DeviseTokenAuth::Concerns::User
|
|
214
213
|
DeviseTokenAuth::Url.generate(base_url, args)
|
215
214
|
end
|
216
215
|
|
217
|
-
|
218
216
|
def extend_batch_buffer(token, client_id)
|
219
|
-
self.tokens[client_id]['updated_at'] = Time.now
|
217
|
+
self.tokens[client_id]['updated_at'] = Time.zone.now
|
220
218
|
update_auth_header(token, client_id)
|
221
219
|
end
|
222
220
|
|
@@ -242,19 +240,46 @@ module DeviseTokenAuth::Concerns::User
|
|
242
240
|
if tokens
|
243
241
|
tokens.delete_if do |cid, v|
|
244
242
|
expiry = v[:expiry] || v["expiry"]
|
245
|
-
DateTime.strptime(expiry.to_s, '%s') < Time.now
|
243
|
+
DateTime.strptime(expiry.to_s, '%s') < Time.zone.now
|
246
244
|
end
|
247
245
|
end
|
248
246
|
end
|
249
247
|
|
248
|
+
def should_remove_tokens_after_password_reset?
|
249
|
+
if Rails::VERSION::MAJOR <= 5
|
250
|
+
encrypted_password_changed? &&
|
251
|
+
DeviseTokenAuth.remove_tokens_after_password_reset
|
252
|
+
else
|
253
|
+
saved_change_to_encrypted_password? &&
|
254
|
+
DeviseTokenAuth.remove_tokens_after_password_reset
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
250
258
|
def remove_tokens_after_password_reset
|
251
|
-
|
252
|
-
encrypted_password_changed? && tokens && tokens.many?
|
259
|
+
return unless should_remove_tokens_after_password_reset?
|
253
260
|
|
254
|
-
if
|
261
|
+
if tokens.present? && tokens.many?
|
255
262
|
client_id, token_data = tokens.max_by { |cid, v| v[:expiry] || v["expiry"] }
|
256
263
|
self.tokens = {client_id => token_data}
|
257
264
|
end
|
258
265
|
end
|
259
266
|
|
267
|
+
def max_client_tokens_exceeded?
|
268
|
+
tokens.length > DeviseTokenAuth.max_number_of_devices
|
269
|
+
end
|
270
|
+
|
271
|
+
def clean_old_tokens
|
272
|
+
if tokens.present? && max_client_tokens_exceeded?
|
273
|
+
# Using Enumerable#sort_by on a Hash will typecast it into an associative
|
274
|
+
# Array (i.e. an Array of key-value Array pairs). However, since Hashes
|
275
|
+
# have an internal order in Ruby 1.9+, the resulting sorted associative
|
276
|
+
# Array can be converted back into a Hash, while maintaining the sorted
|
277
|
+
# order.
|
278
|
+
self.tokens = tokens.sort_by { |_cid, v| v[:expiry] || v['expiry'] }.to_h
|
279
|
+
|
280
|
+
# Since the tokens are sorted by expiry, shift the oldest client token
|
281
|
+
# off the Hash until it no longer exceeds the maximum number of clients
|
282
|
+
tokens.shift while max_client_tokens_exceeded?
|
283
|
+
end
|
284
|
+
end
|
260
285
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class EmailValidator < ActiveModel::EachValidator
|
2
4
|
def validate_each(record, attribute, value)
|
3
5
|
unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
|
@@ -18,4 +20,4 @@ class EmailValidator < ActiveModel::EachValidator
|
|
18
20
|
|
19
21
|
message
|
20
22
|
end
|
21
|
-
end
|
23
|
+
end
|
data/config/locales/da-DK.yml
CHANGED
@@ -26,7 +26,7 @@ da-DK:
|
|
26
26
|
unlocks:
|
27
27
|
missing_email: "Du skal udfylde en email."
|
28
28
|
sended: "En email er blevet sendt til '%{email}', som indeholder instruktioner for at låse kontoen op."
|
29
|
-
user_not_found: "Kan ikke finde en
|
29
|
+
user_not_found: "Kan ikke finde en bruger med email '%{email}'."
|
30
30
|
errors:
|
31
31
|
messages:
|
32
32
|
validate_sign_up_params: "Angiv venligst passende registeringsdata i request body."
|
@@ -0,0 +1,50 @@
|
|
1
|
+
sv:
|
2
|
+
devise_token_auth:
|
3
|
+
sessions:
|
4
|
+
not_confirmed: "Ett bekräftelse-email har skickats till '%{email}'. Följ instruktionerna i emailet så kan ditt konto aktiveras"
|
5
|
+
bad_credentials: "Ogiltig login-information. Vänligen försök igen."
|
6
|
+
not_supported: "Använd POST /sign_in för att logga in. GET stöds inte."
|
7
|
+
user_not_found: "Användaren hittades inte eller var inte inloggad."
|
8
|
+
token_validations:
|
9
|
+
invalid: "Ogiltig token-information"
|
10
|
+
registrations:
|
11
|
+
missing_confirm_success_url: "Saknar 'confirm_success_url'-parameter."
|
12
|
+
redirect_url_not_allowed: "Omdirigering till '%{redirect_url}' ej tillåten."
|
13
|
+
email_already_exists: "Det finns redan ett konto för '%{email}'"
|
14
|
+
account_with_uid_destroyed: "Kontot med UID '%{uid}' har tagits bort."
|
15
|
+
account_to_destroy_not_found: "Kunde inte hitta kontot för borttagning."
|
16
|
+
user_not_found: "Användaren hittades ej."
|
17
|
+
passwords:
|
18
|
+
missing_email: "Du måste ange en emailadress."
|
19
|
+
missing_redirect_url: "Saknar en omdirigerings-URL."
|
20
|
+
not_allowed_redirect_url: "Omdirigering till '%{redirect_url}' ej tillåten."
|
21
|
+
sended: "Ett email har skickats till '%{email}' med instruktioner för hur du skapar ett nytt lösenord."
|
22
|
+
user_not_found: "Kunde inte hitta användaren med email '%{email}'."
|
23
|
+
password_not_required: "Det har kontot kräver inget lösenord. Logga in via ditt '%{provider}'-konto istället."
|
24
|
+
missing_passwords: "Du måste fylla i fälten 'Lösenord' och 'Upprepa lösenord'."
|
25
|
+
successfully_updated: "Ditt lösenord har ändrats."
|
26
|
+
unlocks:
|
27
|
+
missing_email: "Du måste ange en emailadress."
|
28
|
+
sended: "Ett email har skickats till '%{email}' med instruktioner för hur du låser upp ditt konto."
|
29
|
+
user_not_found: "Kunde inte hitta användaren med emailadressen '%{email}'."
|
30
|
+
errors:
|
31
|
+
messages:
|
32
|
+
validate_sign_up_params: "Vänligen skicka giltig data för att skapa konto i request-bodyn."
|
33
|
+
validate_account_update_params: "Vänligen skicka giltig data för att uppdatera konto i request-bodyn."
|
34
|
+
not_email: "är inte en emailadress"
|
35
|
+
devise:
|
36
|
+
mailer:
|
37
|
+
confirmation_instructions:
|
38
|
+
confirm_link_msg: "Du kan bekräfta ditt kontos emailadress genom att besöka länken nedan:"
|
39
|
+
confirm_account_link: "Bekräfta mitt konto"
|
40
|
+
reset_password_instructions:
|
41
|
+
request_reset_link_msg: "Någon har begärt en länk för att ändra ditt lösenord. Du kan göra detta via länken nedan."
|
42
|
+
password_change_link: "Byt mitt lösenord"
|
43
|
+
ignore_mail_msg: "Om du inte begärt detta, vänligen bortse från detta mail."
|
44
|
+
no_changes_msg: "Ditt lösenord kommer inte att ändras förrän du använder länken ovan och skapar ett nytt."
|
45
|
+
unlock_instructions:
|
46
|
+
account_lock_msg: "Ditt konto har låsts efter för många misslyckade loginförsök."
|
47
|
+
unlock_link_msg: "Klicka på länken nedan för att låsa upp ditt konto:"
|
48
|
+
unlock_link: "Lås upp mitt konto"
|
49
|
+
hello: "hej"
|
50
|
+
welcome: "välkommen"
|