#ruby-on-rails #ruby #devise
#ruby-on-rails #ruby #разработать
Вопрос:
У меня проблемы со сбросом пароля в моем приложении. Нажав кнопку «Сбросить пароль», я получаю электронное письмо «Инструкции по сбросу пароля» со ссылкой на «Сбросить пароль».
При входе в систему — если я нажимаю ссылку на сброс пароля из электронного письма, он перенаправляется на корневой путь, а не на страницу сброса пароля.
При выходе из системы — после выхода из моего приложения, а затем нажатия на ссылку «Сбросить пароль» в электронном письме, оно перенаправляется на страницу редактирования пароля.
Следуя этим инструкциям — ( https://github.com/plataformatec/devise/wiki/How-To:-Redirect-URL-after-sending-reset-password-instructions )
Контроллер паролей:
class Users::PasswordsController < Devise::PasswordsController
protected
def after_sending_reset_password_instructions_path_for(resource_name)
edit_user_registration_path
end
end
config/routes.rb:
devise_for :users, controllers: { passwords: 'passwords' }
Но все равно получаю ту же ошибку. Журнал консоли:
Started GET "/users/password/edit?reset_password_token=[FILTERED]" for 127.0.0.1 at 2019-04-09 13:59:26 0300
Processing by Users::PasswordsController#edit as HTML
Parameters: {"reset_password_token"=>"[FILTERED]"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 10], ["LIMIT", 1]]
↳ /home/anatoly/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
Redirected to http://localhost:3000/
Filter chain halted as :require_no_authentication rendered or redirected
Completed 302 Found in 2ms (ActiveRecord: 0.3ms)
Кто-нибудь может мне помочь?
Заранее благодарю вас!
Комментарии:
1. Можете ли вы проверить это github.com/plataformatec/devise/wiki /…
2. Спасибо! Я уже добавил эту функциональность в свое приложение. Мой вопрос касался сброса пароля администратором, а затем установки нового пароля пользователем. (как хотел мой работодатель). Я тоже решил эту проблему. Я только что добавил skip_before_action :require_no_authentication в PasswordsController.rb.
Ответ №1:
Это поведение правильное.
Страница «Сброс пароля» используется только для восстановления пароля, поэтому, если пользователь уже зарегистрирован, страница не отображается. Зарегистрированные пользователи могут использовать маршрут /users/edit
для редактирования своего пароля.
Вот как контроллер восстановления пароля Devise предотвращает доступ зарегистрированного пользователя к странице «Сброс пароля»:
- контроллеры /разработка/passwords_controller.rb#L4
- Вызывает
require_no_authentication
- Вызывает
- devise_controller.rb#L114-L116
- Обнаруживает зарегистрированного пользователя и перенаправляет на
after_sign_in_path_for
путь
- Обнаруживает зарегистрированного пользователя и перенаправляет на