2015-03-25 84 views
-1

我正在開發一個用戶登錄和退出的項目,我知道一個完整的令人震驚的項目,並且我們確保在完成後人們可以註銷。我們注意到的一件事是,由於各種原因,當系統已經註銷時,用戶可以嘗試點擊註銷按鈕。 (會話超時,從其他瀏覽器登錄或其他原因,該站點只允許每個用戶同時登錄一次)未登錄用戶的post請求的測試行爲

因此,當用戶嘗試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驗證的建議,或者在單元測試中測試它的另一種方法?

回答