2014-10-29 98 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