File tree 3 files changed +60
-0
lines changed
3 files changed +60
-0
lines changed Original file line number Diff line number Diff line change @@ -348,7 +348,19 @@ def send_confirmation_instructions(attributes={})
348
348
# If the user is already confirmed, create an error for the user
349
349
# Options must have the confirmation_token
350
350
def confirm_by_token ( confirmation_token )
351
+ # When the `confirmation_token` parameter is blank, if there are any users with a blank
352
+ # `confirmation_token` in the database, the first one would be confirmed here.
353
+ # The error is being manually added here to ensure no users are confirmed by mistake.
354
+ # This was done in the model for convenience, since validation errors are automatically
355
+ # displayed in the view.
356
+ if confirmation_token . blank?
357
+ confirmable = new
358
+ confirmable . errors . add ( :confirmation_token , :blank )
359
+ return confirmable
360
+ end
361
+
351
362
confirmable = find_first_by_auth_conditions ( confirmation_token : confirmation_token )
363
+
352
364
unless confirmable
353
365
confirmation_digest = Devise . token_generator . digest ( self , :confirmation_token , confirmation_token )
354
366
confirmable = find_or_initialize_with_error_by ( :confirmation_token , confirmation_digest )
Original file line number Diff line number Diff line change @@ -175,6 +175,36 @@ def resend_confirmation
175
175
assert_current_url '/users/sign_in'
176
176
end
177
177
178
+ test "should not be able to confirm an email with a blank confirmation token" do
179
+ visit_user_confirmation_with_token ( "" )
180
+
181
+ assert_contain "Confirmation token can't be blank"
182
+ end
183
+
184
+ test "should not be able to confirm an email with a nil confirmation token" do
185
+ visit_user_confirmation_with_token ( nil )
186
+
187
+ assert_contain "Confirmation token can't be blank"
188
+ end
189
+
190
+ test "should not be able to confirm user with blank confirmation token" do
191
+ user = create_user ( confirm : false )
192
+ user . update_attribute ( :confirmation_token , "" )
193
+
194
+ visit_user_confirmation_with_token ( "" )
195
+
196
+ assert_contain "Confirmation token can't be blank"
197
+ end
198
+
199
+ test "should not be able to confirm user with nil confirmation token" do
200
+ user = create_user ( confirm : false )
201
+ user . update_attribute ( :confirmation_token , nil )
202
+
203
+ visit_user_confirmation_with_token ( nil )
204
+
205
+ assert_contain "Confirmation token can't be blank"
206
+ end
207
+
178
208
test 'error message is configurable by resource name' do
179
209
store_translations :en , devise : {
180
210
failure : { user : { unconfirmed : "Not confirmed user" } }
Original file line number Diff line number Diff line change @@ -77,6 +77,24 @@ def setup
77
77
assert_equal "can't be blank" , confirmed_user . errors [ :confirmation_token ] . join
78
78
end
79
79
80
+ test 'should return a new record with errors when a blank token is given and a record exists on the database' do
81
+ user = create_user ( confirmation_token : '' )
82
+
83
+ confirmed_user = User . confirm_by_token ( '' )
84
+
85
+ refute user . reload . confirmed?
86
+ assert_equal "can't be blank" , confirmed_user . errors [ :confirmation_token ] . join
87
+ end
88
+
89
+ test 'should return a new record with errors when a nil token is given and a record exists on the database' do
90
+ user = create_user ( confirmation_token : nil )
91
+
92
+ confirmed_user = User . confirm_by_token ( nil )
93
+
94
+ refute user . reload . confirmed?
95
+ assert_equal "can't be blank" , confirmed_user . errors [ :confirmation_token ] . join
96
+ end
97
+
80
98
test 'should generate errors for a user email if user is already confirmed' do
81
99
user = create_user
82
100
user . confirmed_at = Time . now
You can’t perform that action at this time.
0 commit comments