0

我有签到?如果您已闲置 5 分钟,rails 中的方法将带您返回登录页面。

当用户在 5 分钟后点击通过 js 提交的表单时,我该如何进行这项工作?显然,当这种情况发生时,服务器会将登录页面发回给用户,但没有显示出来。这是我的 signed_in 方法

def signed_in?
  unless current_user
    flash[:notice] = "Please log in"
    redirect_to root_url
  else
    if session[:expiry_time].nil? || session[:expiry_time] < 5.minutes.ago
      reset_session
      flash[:notice] = "Please log in"
      redirect_to root_url
    else
      session[:expiry_time] = 300.seconds.from_now
    end
  end
end

PS:我知道这是可怕的代码,我一定会重构它:)

4

2 回答 2

0

这是我想出的解决方案,我觉得它更简单。在 signed_in 方法中:

respond_to do |format|
    format.js {
      flash[:notice] = "Please log in"
      render 'home/not_logged_in'
    }

然后在 not_logged_in 视图上

window.location = '<%= root_url %>';
于 2012-08-18T23:36:45.723 回答
0

但我会首先实现一个替代重定向方法,即使对 XHR 请求也执行完全重定向:

def redirect_with_js location
  if request.xhr?
    # HTML response is expected:
    render :text => "<script>document.location = '#{view_context.escape_javascript location}'</script>"
    # JS response is expected:
    # render :text => "document.location = '#{view_context.escape_javascript location}'"
  else
    redirect_to location
  end
end

然后在重定向的时候使用这个方法:

redirect_with_js boomeranked_url

返回的文本取决于 AJAX 请求期望返回的响应类型(HTML 或 JS)。我已经包含了这两个版本。这应该给你一些开始。

于 2012-08-18T19:07:26.650 回答