Тестирование поведения почтового запроса для незарегистрированного пользователя

Я работаю над проектом, в котором пользователи входят и выходят из системы, я знаю, что это полный шок, и мы гарантируем, что люди смогут выйти из системы, когда закончат. Одна вещь, которую мы заметили, заключается в том, что по разным причинам пользователь может попытаться нажать кнопку выхода, когда система уже вышла из него. (Тайм-аут сеанса, вход в систему из другого браузера или другие причины. Сайт допускает только один одновременный вход для каждого пользователя.)

Итак, что происходит, когда пользователь пытается выполнить POST по URL-адресу выхода, так это то, что он не проходит проверку CSRF, поскольку у него нет действительного сеанса. Мы не можем удалить проверку CSRF из соображений безопасности.

Таким образом, я пытаюсь добавить тест, который позволяет мне проверить это поведение и вместо того, чтобы взорваться с недопустимым токеном CSRF, он молча признает, что пользователь уже вышел из системы, и продолжит свою работу.

То, что я пробовал, в основном это:

context 'user is not logged in' do
  before do
    Rails.application.config.action_controller.allow_forgery_protection = true
  end

  it 'does not blow up' do
    expect { post :destroy, {}, { some_key: 'val' } }.not_to raise_error
  end

  it 'redirects to logout path' do
    expect(response).to redirect_to(successful_logout_path)
  end
end

Который становится зеленым, несмотря на отсутствие каких-либо логических изменений в моем контроллере, и ручное тестирование подтверждает, что он все еще не работает.

Любое предложение о том, как включить проверку CSRF для этого контекста или другой способ проверить это в модульных тестах?


person gaqzi    schedule 25.03.2015    source источник


Ответы (1)


У Devise была похожая проблема вплоть до прошлого года. Я отправил задачу на Github здесь: https://github.com/plataformatec/devise/issues/2934, и в итоге это было исправлено. Этот другой вопрос должен помочь вам: выйти после того, как уже вышел)

person freddyrangel    schedule 26.03.2015