Skip to content

Commit 3c32d15

Browse files
authored
Handle expired reset_password_tokens on passwords#update (#1662)
* Handle expired reset_password_tokens on update * fixup! Handle expired reset_password_tokens on update
1 parent 9719d24 commit 3c32d15

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

app/controllers/devise_token_auth/passwords_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def update
7373
# make sure user is authorized
7474
if require_client_password_reset_token? && resource_params[:reset_password_token]
7575
@resource = resource_class.with_reset_password_token(resource_params[:reset_password_token])
76-
return render_update_error_unauthorized unless @resource
76+
return render_update_error_unauthorized unless @resource && @resource.reset_password_period_valid?
7777

7878
@token = @resource.create_token
7979
else

test/controllers/devise_token_auth/passwords_controller_test.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,36 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
746746
end
747747
end
748748

749+
describe 'with expired reset password token' do
750+
before do
751+
DeviseTokenAuth.require_client_password_reset_token = true
752+
reset_password_token = @resource.send_reset_password_instructions
753+
@resource.update! reset_password_sent_at: 2.days.ago
754+
755+
@new_password = Faker::Internet.password
756+
@params = { password: @new_password,
757+
password_confirmation: @new_password,
758+
reset_password_token: reset_password_token }
759+
760+
put :update, params: @params
761+
762+
@data = JSON.parse(response.body)
763+
@resource.reload
764+
end
765+
766+
test 'request should fail' do
767+
assert_equal 401, response.status
768+
end
769+
770+
test 'new password should not authenticate user' do
771+
assert !@resource.valid_password?(@new_password)
772+
end
773+
774+
teardown do
775+
DeviseTokenAuth.require_client_password_reset_token = false
776+
end
777+
end
778+
749779
describe 'with invalid reset password token' do
750780
before do
751781
DeviseTokenAuth.require_client_password_reset_token = true

test/dummy/config/application.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require File.expand_path('boot', __dir__)
44

5+
require 'logger'
56
require 'action_controller/railtie'
67
require 'action_mailer/railtie'
78
require 'rails/generators'

0 commit comments

Comments
 (0)