如何阻止用户通过地址栏进行特定操作?

时间:2015-10-04 17:15:41

标签: ruby-on-rails routes

如何阻止用户通过地址栏进行特定操作。

例如:在我的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

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:2)

UsersController中,您可以添加before_action以确保用户已登录。

before_action :authorize_user!, only: :index

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

如果您从不想要访问用户索引操作,那么从生成的路由中删除它是最佳选择。

get '/users', to: redirect('/')
resources :users, except: [:index]