Тестване на поведението на заявка за публикация за невлязъл потребител

Работя върху проект, при който потребителите влизат и излизат, което е пълен шок, знам, и ние гарантираме, че хората могат да излязат, когато са готови. Едно нещо, което забелязахме е, че по различни причини потребителят може да се опита да щракне върху бутона за излизане, когато системата вече го е излязла. (Изчакване на сесията, влизане от друг браузър или други причини. Сайтът позволява само едно едновременно влизане на потребител.)

И така, това, което се случва, когато потребителят се опита да ПУБЛИКУВА до 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 и в крайна сметка беше поправено. Този друг въпрос трябва да ви помогне: InvalidAuthenticityToken в Devise::SessionsController#destroy ( излезте, след като вече сте излезли)

person freddyrangel    schedule 26.03.2015