Rails / Devise редирект после выхода - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть сайт, который разделен на сторону приложения и сторону WordPress. WordPress имеет текст c, который клиент может легко обновить, размещенный в Google. Сторона приложения сделана в Rails с использованием Devise для аутентификации и размещена на Heroku.

Я бы хотел перенаправить на сайт WordPress после того, как пользователь вышел из системы, и использую after_sign_out_path_for для выполнения sh этого. Локально работает нормально, но на производстве я получаю неправильное поведение.

Пользователь нажимает кнопку «Выйти», и браузер перенаправляет на сайт WordPress, как и ожидалось. Однако пользователь фактически не вышел из системы! Если они нажимают на кнопку «Войти», они направляются прямо в путь root_path без необходимости вводить свои учетные данные. Или, если они перейдут, например, к https://www.theappsite.com/users/edit или https://www.theappsite.com/subscriptions/new (оба из которых имеют before_action: authenticate_user!), Они могут получить к ним доступ, не вводя свои учетные данные.

Примечательно - я не могу дублировать это локально. Это происходит только в производстве. Локально, я получаю перенаправление, и пользователь должен повторно аутентифицироваться, если они нажимают «Войти».

Моя интуиция заключается в том, что сеанс или готовка ie не разрушаются до того, как происходит перенаправление, но я не знаю, почему это произойдет только в производстве ... любой совет будет оценен!

application_controller

  def after_sign_out_path_for(resource_or_scope)
    # redirect to the wordpress site
    if Rails.env.production?
      'https://www.thewordpresssite.com'
    else
      #testing...
      'https://www.google.com'
    end
  end

views / nav_bar. html .haml

  %li.has-dropdown
    %a Account
    %ul.dropdown
      %li= link_to 'My Profile', edit_user_registration_path
      %li= link_to 'Subscriptions', accounts_path
      %li= link_to 'Payment Methods', payment_methods_path
      %li.fa-sign-in-alt= link_to 'Sign out', destroy_user_session_path, method: 'delete'

1 Ответ

0 голосов
/ 20 февраля 2020

HTTP не имеет состояния, поэтому браузер или ваше приложение должны «запомнить» то, что необходимо запомнить.

, чтобы вы могли завершить сеанс пользователя, удалив его, а не сеанс. Пользователь и убедившись, что браузер / сервер запоминает действие в файлах cookie

, вы найдете все, что вам нужно и многое другое, по ссылке ниже

https://www.theodinproject.com/courses/ruby-on-rails/lessons/sessions-cookies-and-authentication

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