Работя върху проект, при който потребителите влизат и излизат, което е пълен шок, знам, и ние гарантираме, че хората могат да излязат, когато са готови. Едно нещо, което забелязахме е, че по различни причини потребителят може да се опита да щракне върху бутона за излизане, когато системата вече го е излязла. (Изчакване на сесията, влизане от друг браузър или други причини. Сайтът позволява само едно едновременно влизане на потребител.)
И така, това, което се случва, когато потребителят се опита да ПУБЛИКУВА до 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 за този контекст или друг начин за тестване на това в тестовете на единица?