2015-10-04 28 views
2

如何防止用戶通過地址欄進入特定操作。如何防止用戶通過地址欄進入特定操作?

例如:在我的rails應用程序中,如果用戶輸入localhost:3000/users/index它顯示用戶列表。

我該如何預防?如果有人試過這個,我希望他們被重定向到根頁面。

routes.rb 

get 'signup' => 'users#new' 
get 'login' => 'sessions#new' 
get 'blog' => 'user_posts#new' 
resources :sessions 
resources :user_posts 
resources :users 
+0

請提供您的'config/routes.rb'文件 –

+0

@AndreyKryachkov:編輯。 – InQusitive

+0

你確定你提供了完整的'routes.rb'內容嗎?正如Rails指南所述,不應該有'/ users/index'路徑可用。請參閱http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions –

回答

2

這通常是在控制器與before_action回調,則觸發動作之前,將運行處理。下面是實現它的索引操作的簡單方法:

users_controller.rb

before_action :redirect_to_root, only: [:index] 

# Controller actions... 

private 

def redirect_to_root 
    redirect_to root_path 
end 

此外,還要確保你有你的路由定義的根路徑:

的routes.rb

root 'some#action' 
2

在你UsersController你可以添加一個before_action,以確保用戶登錄。

before_action :authorize_user!, only: :index 

def authorize_user! 
    redirect_to root_path unless session[:user_id].present? 
end 

如果您不希望訪問用戶index動作然後從生成的路由刪除它是最好的選擇。

get '/users', to: redirect('/') 
resources :users, except: [:index] 
相關問題