抱歉,如果这是一个非常愚蠢的问题,或者我做了一些非常愚蠢的事情,我还是个新手。我正在尝试实现会话超时机制,并且为此在 SO 中找到了一些有用的问题/答案,我已经遵循了。我添加了一个 last_seen 时间作为会话变量,我在我的应用程序控制器的 before_filter 中检查它,如果超过设置的时间间隔,则将用户发送回登录页面。
应用控制器
reset_session if session[:last_seen] < 1.minutes.ago
if session[:user_id] == nil
redirect_to login_path, notice: "Please log in"
return
end
session[:last_seen] = Time.now
这在大多数页面上都可以正常工作,但是我有一些带有标签的页面,使用 jquery 来更改内容,因为选择了标签。
链接代码:
<li class="<%=get_active('index_audit','ultra')%>"><%= link_to 'Load IT Estate', ultraaudit_path, remote: true %> </li>
控制器代码:
def index_audit
@subscription = current_subscription
respond_to do |format|
format.js
end
end
有一个 index_audt.js 有 JS 用渲染的部分替换 div
如果发生超时并且下一个操作是单击选项卡以呈现下一页,它会通过代码但不会在浏览器中显示登录页面
我在 RubyMine 中进行调试,控制台显示它正在尝试呈现登录页面,即会话/新页面:
Processing by UltraController#index_audit as JS
Parameters: {"locale"=>"en-GB"}
Redirected to http://localhost:3000/?locale=en-GB
Filter chain halted as :logged_in rendered or redirected
Completed 302 Found in 6ms (ActiveRecord: 0.0ms)
Started GET "/?locale=en-GB" for 127.0.0.1 at 2012-06-14 11:28:44 +0100
Processing by SessionsController#new as JS
Parameters: {"locale"=>"en-GB"}
Rendered sessions/new.html.erb within layouts/application (16.0ms)
Completed 200 OK in 323ms (Views: 320.6ms | ActiveRecord: 0.0ms)
但它只是没有出现在浏览器中
我尝试在 index_audit 控制器方法的顶部放置一个重定向,这也有同样的问题。我的理论是远程:真实是原因,但我不知道该怎么做才能解决它。有人可以帮忙吗?