2014-10-29 93 views
0

我正在使用Rails 4和Devise对用户进行身份验证。一旦用户登录,他们将被重定向到一个sinatra应用程序。我需要保护该页面的路由免受未签名用户的影响。保护未登录用户的路由

所以我需要防止用户访问,如果他们没有在签署是路由/ kibana

这里是我的路线文件:

devise_for :user 
    root 'pages#home' 

    mount Kibana::Sinatra::Web => '/kibana', :trailing_slash => true 

任何帮助非常感谢,谢谢。这里

编辑是我的ApplicationController文件

protect_from_forgery 
    before_filter :check_user 
    private 
    def check_user 
    if request.fullpath =~ /kibana/ && !user_signed_in? 
     authenticate :user do 
     end 
    end 
    end 

然而,没有结果,我需要。当我访问localhost:3000时,它将我重定向到用户登录,并提示我需要登录,但是当我访问/ kibana /时,它只是显示它而不必登录。

回答

1

更多或少是这样的:

class ApplicationController 

    before_filter :check_user 

    private 

    def check_user 
    if !current_user && request.fullpath =~ /kibana/ 
     redirect_to your_app_login_url 
    end 
    end 

end 

编辑:

它看起来像我错了,你的routes.rb内:

authenticate :user do 
    mount Kibana::Sinatra::Web => '/kibana', :trailing_slash => true 
end 
+0

我必须使用控制器来保护路线吗? – 2014-10-29 17:48:50

+0

'routes.rb'只给出应用程序路由的定义。您无权访问此处的请求。 – blelump 2014-10-29 17:53:50

+0

我明白了。我尝试了你的解决方案,但是我仍然可以访问/ kibana /而不必登录。 – 2014-10-29 18:06:51