我有一个处理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
答案 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