在使用Devise进行身份验证后,我发现存在一个安全漏洞,即用户注销后,会话变量仍保留。这使得任何人都可以按返回按钮并访问已登录用户的先前屏幕。
我将以下行添加到我的application_controller中:
before_filter :set_no_cache
def set_no_cache
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
在 _form.html.erb 文件的顶部,我添加了以下内容
<%if user_signed_in? %>
<%=link_to "Sign Out", destroy_user_session_path, :method => :delete %><br/>
<%= form_for(@listing) do |f| %>
<% if @listing.errors.any? %>
...........
然后我在Firefox、Chrome和Safari上测试了应用程序。
Firefox和Chrome都没有问题,因为我注销并点击了后退按钮,无法看到用户的上一个屏幕,但是,在Safari和Opera中,不安全的行为仍然存在。这段代码没有任何效果。
有什么建议可以解决这个问题吗?
谢谢