Я следую руководству Майкла Хартла по обучению Ruby и ухожу на урок 12: Форма сброса пароля.
Моя проблема заключается в том, что при локальном тестировании я не перехожу к форме сброса паролей. Я вижу в своих журналах, что он пытается, но вместо этого перенаправляет меня на домашнюю страницу (корень "/"). Я понятия не имею, почему он делает это, поскольку я следую за учебником. Но это работает в производстве! У меня есть все репозитории GitHub здесь , если кто-то хочет взглянуть.
Я подтвердил, что мой routes.rb
правильный, так как я вижу URL сброса пароля, используя rake rails
. Я также проверил, что действительно перенаправляет меня на / как в журналах сервера:
Started GET "/password_resets/D7-YG1GP-RNkdVJFp4PwjQ/edit?email=jessica@example.com" for 127.0.0.1 at 2019-06-23 13:13:20 -0400
Processing by PasswordResetsController#edit as HTML
Parameters: {"email"=>"jessica@example.com", "id"=>"D7-YG1GP-RNkdVJFp4PwjQ"}
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "jessica@example.com"], ["LIMIT", 1]]
↳ app/controllers/password_resets_controller.rb:45
Redirected to http://0.0.0.0:3000/
Filter chain halted as :valid_user rendered or redirected
Completed 302 Found in 2ms (ActiveRecord: 1.0ms)
Похоже, виновником является valid_user
функция, но для меня это выглядит нормально. По сути, пользователь должен существовать в базе данных, быть активирован и аутентифицирован с использованием токенов. В противном случае вы будете перенаправлены.
# Confirms a valid user.
def valid_user
unless (@user && @user.activated? &&
@user.authenticated?(:reset, params[:id]))
redirect_to root_url
end
end