0

我有一个简单的Rails 3.2应用程序和Backbone.js前端。我有我的后端定义下面before_filter和助手:引导数据之前需要认证用户

# my before_filter placed in most controllers 
def require_user 
    unless logged_in? 
    redirect_to '/#login' 
    end 
end 

def logged_in? 
    !!current_user 
end 

def current_user 
    @_current_user ||= session[:user_id] && Appuser.find_by_id(session[:user_id]) 
end 

这个伟大的工程,从而限制对登录用户访问大部分的操作。不过,我也有一个<script>标签在我的主要应用程序模板底部数据自举到我的收藏Backbone.js的(HAML):

!!! 
%html{:lang => "en"} 
    %head 
    %title InfoUser 
    = stylesheet_link_tag "application", :media => "all" 
    = javascript_include_tag "application" 
    = csrf_meta_tags 
    %script 
     $(document).ready(function(){ App.init(); }); 

    %body 

    -# Layout markup 

    :javascript 
     projects.reset(#{Project.all.to_json}) 
     groups.reset(#{Group.all.to_json}) 
     users.reset(#{User.all.to_json}) 

    = render "layouts/templates" 

的问题是,即使未经认证的用户访问应用程序,并为立即重定向到登录页面,该引导脚本仍然被添加到页面的底部,并且所有数据都显示在集合中。

haml有没有办法检查用户的状态,还是有另一种方式来处理引导,等待用户通过身份验证?

回答

1

我不知道你想,只有当用户登录到执行哪个部分,但你可以做这样的:

- if logged_in? 
    -# code you want to run here 

因此,例如,

- if logged_in? 
    :javascript 
    $(document).ready(function(){ App.init(); }); 
+0

当我添加' - 如果logged_in?'为/app/views/layouts/application.html.haml,我会在Home#index中找到一个'NoMethodError',具体来说就是'未定义的方法logged_in?'为......'。有什么需要声明我需要添加到我的哈姆文件,或者我的'HomeController'? – jackwanders 2012-07-09 23:25:42

+0

'logged_in?'在控制器上可用,而不是视图。您可以将实例变量传递给控制器​​的视图,如'@ logged_in'。 – 2012-07-09 23:36:17

+0

有不同的方式让你的控制器助手进入视图。这里有一些 - http://stackoverflow.com/questions/453762/nomethoderror-when-trying-to-invoke-helper-method-from-rails-controller – Dty 2012-07-09 23:52:28

相关问题