如何阻止用户通过地址栏进行特定操作。
例如:在我的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 :(得分: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]