Проблемы с маршрутизацией на Rails: как заставить Devise сохранять аутентифицированного пользователя методом post

У меня есть index метод в моем homepage_controller, На домашней странице есть модуль поиска, и когда пользователь что-то ищет, домашняя страница вызывает себя с помощью формы поиска, используя GET метод.

Маршрут у меня в моем routes.rb для этого точного случая это:

get '/' => 'homepage#index', as: :homepage_without_locale

И я добавил эту строку в мой routes.rb файл:

  post '/' => 'homepage#index', as: :post_homepage_without_locale

Это работает независимо от того, вошел ли пользователь в систему или нет, как и должно быть. Конечно, если пользователь вошел в систему, когда страница снова загружается с результатами поиска, пользователь все еще вошел в систему.

Теперь простой факт изменения метода формы GET в POST вводит поведение, которое я не понимаю: когда вошедший в систему пользователь ищет что-то, результаты поиска возвращаются, как и должно быть, но страница отображается так, как будто пользователь не вошел в систему.

Когда возникает эта проблема, если я просто обновить страницу (которая вызывает его с GET метод), я вошел снова (так что не проблема с куки).

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

def fetch_logged_in_user
  if person_signed_in?
    @current_user = current_person
    setup_logger!(user_id: @current_user.id, username: @current_user.username)
  end
end

Я проверял, когда я использую GET метод в моей форме, person_signed_in? является true, Если я использую POST метод, person_signed_in? является false, Этот метод, person_signed_in? является внутренним для Devise.

Поскольку я ничего не добавил в маршрутизацию, чтобы сказать Devise, чтобы пользователь оставался аутентичным, я подозреваю, что что-то там не хватает, любая помощь приветствуется.

0 ответов

Другие вопросы по тегам