所以我试图重定向到我的root_url,但是从几个部分深处。重定向有效,但只在部分内重定向。它在实现部分之前工作正常。要重定向,我有一个检查会话的before_filter,如果会话不再有效,则重定向到root_url。
另一个注意事项:我正在进行ajax调用以返回其他部分(如加载div创建的服务器端),似乎在会话到期后而不是返回部分的html,它返回它应该重定向到的登录html。这太烦人了。
所以 的 application.html.erb
<div id="main-contain" class="container">
<%= yield %>
</div>
呈现 的 _content.html.erb
<%= render partial: 'partials/content' %>
呈现 的 _my_partial.html.erb
<%= render partial: 'partials/my_partial' %>
当会话结束时,重定向仅在最深部分内工作。
有什么想法吗?经过长时间的磨头,我上下搜索过。
编辑:
这是前过滤功能
unless is_authorized
flash[:content] = { title: 'Login Required', message: 'You must log in to access dash.' }
redirect_to '/gate'
end
其中'gate'是我的登录页面。这是路线:
match 'gate' => 'gate#latch'
答案 0 :(得分:1)
经过多次头脑刮擦后弄清楚了:)我似乎只能将登录页面作为html而不是重定向返回。我的解决方案:
我的身份验证检查中:
unless is_authorized
respond_to do |format|
format.html { redirect_to '/gate' }
format.js { render :json => { redirect: true } , :status => :unauthorized }
end
end # is_authorized
和一些javascript:
$.ajaxSetup({
statusCode: {
401: function(data) {
var response = JSON.parse(data.responseText);
if (response.redirect == true) {
location.href = "/gate";
}
}
}
});
所以我真正需要做的就是在会话过期时发回401,在AJAX调用中监听401s,最后重新定向,如果我们收到401和重定向参数。
答案 1 :(得分:0)
如果您正在使用ajax调用,则应返回JS重定向/重新加载页面;否则页面将不会转到'/ gate'网址