Почему я получил Несанкционированный возврат после сброса пароля? - PullRequest
0 голосов
/ 12 июля 2020

Я использую драгоценный камень 'Devise' для сброса пароля моего пользователя. Я получаю неожиданный ответ, когда пытаюсь сбросить сброс пароля моего пользователя, как показано ниже:

Started PUT "/users/password" for 127.0.0.1 at 2020-07-12 12:37:05 -0300
Processing by Users::PasswordsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"aGFb1LDvwSZjI+xUY6EscmEhhBdu+tqGqgnRZZY4r2xxDauMhMBvCM80/lX7RR66T4P8ZEB/9M48oCKZ9qPlKQ==", "user"=>{"reset_password_token"=>"[FILTERED]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Alterar minha senha"}
  User Load (1.1ms)  SELECT  `users`.* FROM `users` WHERE `users`.`reset_password_token` = '266d3fa84febf8e888c901db6bc6075b741fb3759f4e508f93a3b00b823f5088' ORDER BY `users`.`id` ASC LIMIT 1
   (0.4ms)  BEGIN
  User Exists (0.7ms)  SELECT  1 AS one FROM `users` WHERE `users`.`phone` = '(61) 99634-0978' AND `users`.`id` != 2 LIMIT 1
  Role Load (22.8ms)  SELECT  `roles`.* FROM `roles` INNER JOIN `role_users` ON `roles`.`id` = `role_users`.`role_id` WHERE `role_users`.`user_id` = 2 AND `roles`.`name` = 'driver' LIMIT 1
  User Update (0.9ms)  UPDATE `users` SET `encrypted_password` = '$2a$11$SmfSjRNv.G4ByGzw0hlQdOcYCS2Gn6Y6R39gSePHtsaw1PMTmqmnW', `reset_password_token` = NULL, `reset_password_sent_at` = NULL, `updated_at` = '2020-07-12 15:37:06' WHERE `users`.`id` = 2
   (60.8ms)  COMMIT
   (0.4ms)  BEGIN
   (0.5ms)  COMMIT
Completed 401 Unauthorized in 962ms (ActiveRecord: 107.4ms)


Started GET "/users/sign_in" for 127.0.0.1 at 2020-07-12 12:37:06 -0300
Processing by Devise::SessionsController#new as HTML
  Rendering devise/sessions/new.html.erb within layouts/application
  Rendered devise/shared/_links.html.erb (2.8ms)
  Rendered devise/sessions/new.html.erb within layouts/application (32.2ms)
Completed 200 OK in 98ms (Views: 73.0ms | ActiveRecord: 0.0ms)

То есть мой пользователь был обновлен, но я получил уведомление о несанкционированном доступе и начал запрос GET в / users / sign_in вместо сообщения об ошибке или успехе. Я предоставляю пароль и password_confirmation , чтобы изменить пароль моего пользователя, как показано ниже:

<h2>Change password</h2>

<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
  <%= devise_error_messages! %>
  <%= f.hidden_field :reset_password_token %>

  <div class="field">
    <%= f.label :password, "New password" %><br />
    <% if @minimum_password_length %>
      <em>(Minimum of<%= @minimum_password_length %> characters)</em><br />
    <% end %>
    <%= f.password_field :password, autofocus: true, autocomplete: "off" %>
  </div>

  <div class="field">
    <%= f.label :password_confirmation, "Confirm new password" %><br />
    <%= f.password_field :password_confirmation, autocomplete: "off" %>
  </div>

  <div class="actions">
    <%= f.submit "Change my password" %>
  </div>
<% end %>

И я определил метод в моем password_controller .rb , чтобы сообщить об успехе, следующим образом:

  def after_resetting_password_path_for(_resource)
    render json: { message: 'Success !'}
  end

Что мне нужно исправить в этом коде, чтобы сбросить пароль моего пользователя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...