Разработать перенаправления в / users при неудачном входе в систему или входе в систему - PullRequest
0 голосов
/ 29 апреля 2020

Запуск

  • Рельсы 6.0.2.2
  • Ruby 2.6.5
  • Разработка 4.7.1

В настоящее время в ранние этапы создания проекта. Я использую Devise для аутентификации пользователя, и когда пользователь не может выполнить процесс регистрации или входа, они автоматически перенаправляются на /users, где отображается сообщение об ошибке, что вызывает экран No route matches [GET] "/users", если пользователь решит обновить sh их страницу по любой причине.

Как мне предотвратить это?

# routes.rb

Rails.application.routes.draw do
  devise_for :users

  root to:          'pages#index'
  get 'homepage' => 'pages#homepage'
end
# User Model

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :pwned_password
  validates :email, presence: true
end

Все остальное не затронуто настройкой vanilla rails new, кроме несколько взглядов, не связанных с самой разработкой.

1 Ответ

0 голосов
/ 29 апреля 2020

Это на самом деле типичное поведение для приложения Rails и очень мало общего с Devise.

Когда вы выполняете запрос POST, вы отправляете форму в маршрут сбора в этом случае /users - с неидемпотентным действием. Ответ на запрос POST обычно представляет собой перенаправление на созданный ресурс или форму, отображаемую снова с сообщениями об ошибках.

На самом деле вы не можете снова попасть на эту конкретную «страницу», не отправив точно такой же запрос POST. Запрос POST не должен повторяться, пока пользователь не отправит форму.

Если в этот момент вы нажмете кнопку refre sh в браузере, он отправит запрос GET по тому же пути, который является идемпотентным глаголом, и ваш сервер rails не может - и не должен отвечать на этот запрос GET путем повторного рендеринга этой формы с ошибками, поскольку его не тот же ресурс, и rails НЕ будет переносить параметры из этого предыдущего запроса POST.

Этот тот же принцип применяется к другим неидемпотентным HTTP-глаголам PUT, PATCH и DELETE.

Если это действительно проблема для вашего приложения, вы можете добавить прослушиватель JavaScript для события window.unload, чтобы предупредить пользователей перед обновлением стр.

...