Require both user and email for anonymous password resets

This commit is contained in:
Basti 2020-11-11 19:39:19 +01:00
parent 2b153bef8d
commit a604018249
Signed by untrusted user: basti
GPG Key ID: 9F88009D31D99C72
2 changed files with 21 additions and 8 deletions

View File

@ -12,13 +12,15 @@ class Devise::PasswordsController < DeviseController
# POST /resource/password # POST /resource/password
def create def create
self.resource = resource_class.send_reset_password_instructions(resource_params) user = resource_class.find_by(cn: resource_params['cn'])
yield resource if block_given?
if successfully_sent?(resource) if (!user || user.email != resource_params['email'])
respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name)) msg = "Username or email address not found."
redirect_to new_user_password_path, alert: msg
else else
respond_with(resource) resource_class.send_reset_password_instructions(resource_params)
msg = "We have sent you an email with a link to reset your password."
redirect_to check_your_email_path, notice: msg
end end
end end

View File

@ -4,12 +4,23 @@
<%= render "devise/shared/error_messages", resource: resource %> <%= render "devise/shared/error_messages", resource: resource %>
<div class="field"> <div class="field">
<%= f.label :email %><br /> <p>
<%= f.email_field :email, autofocus: true, autocomplete: "email" %> <%= f.label :cn, 'User' %><br />
<%= f.text_field :cn, autofocus: true, autocomplete: "username" %> @ kosmos.org
</p>
</div>
<div class="field">
<p>
<%= f.label :email, 'Email address' %><br />
<%= f.email_field :email, autocomplete: "email" %>
</p>
</div> </div>
<div class="actions"> <div class="actions">
<%= f.submit "Send me reset password instructions" %> <p>
<%= f.submit "Send me reset password instructions" %>
</p>
</div> </div>
<% end %> <% end %>