Rails 3.2.0 - 在进行JSON调用后重定向

时间:2012-03-09 01:47:06

标签: ruby-on-rails

我有一个处理JSON请求的控制器操作,主要用于处理数据表网格重绘。但我有这个before_filter,它检查会话是否已被销毁,并应重定向回注销操作。当请求是ajax请求时,重定向很好。但是,如果请求是JSON,则日志显示“过滤器链暂停为:授权呈现或重定向”但根本不重定向页面。有线索吗?

我看到日志显示它正在将操作处理为JSON:

Processing by UserController#datatable_redrawings as JSON

我的控制器方法:

before_filter :auth

def auth
  if session[:username].blank?
    flash[:error] = "Please login."
    if request.xhr?
      render :js => "window.location = '/logout'"
    else
      respond_to do |format|
        format.html { redirect_to :action => "logout" }
      end
    end
  end
end

1 个答案:

答案 0 :(得分:4)

重定向不是真正的RESTful,也不是在客户端期待JSON响应时发送JS。您应该发送未授权(401)HTTP状态代码或类似的东西。

before_filter :auth

def auth
  if session[:username].blank?
    respond_to do |format|
      format.json { render :json => [], :status => :unauthorized }
      format.html { redirect_to :action => "logout" }
    end
    return false
  end
end