如果URL在使用Devise时包含特定参数,是否可以排除unsigned-in用户?

时间:2013-08-08 04:04:59

标签: ruby-on-rails ruby-on-rails-3

有这样的网址

example.com/users/1376

即使用户未登录,任何人都可以看到此页面。

还有像这样的网址

example.com/users/1376?mode=1

只有登录用户才能看到此页面,否则用户将被重定向到登录页面(new_users_session_path)

可能是这样的吗?

before_filter :authenticate_user!, :only => [:show(params[:mode]=1)] 

如果没有,请告诉我如何解决这个问题。

由于

2 个答案:

答案 0 :(得分:2)

如果不应该运行该操作,请使用before_filter(rails 4的before_action)调用呈现或重定向的方法。

before_filter :test_for_mode, :only => :show

...

private
  def test_for_mode
    if (params[:mode] == '1') && !user_signed_in?
      redirect_to new_user_session_path
  end

答案 1 :(得分:1)

对于rails 3.2

before_filter :redirect_user, :only => :show

对于rails 4

before_action :redirect_user, :only => :show

def redirect_user          
 if params[:mode] == 1 && current_user      
  redirect_to user_path(id: params[:id], mode: 1) #example.com/users/1376?mode=1
 elsif !current_user && params[:mode].blank?
   redirect_to user_path(id: params[:id]) 
 else  
  redirect_to new_users_session_path
 end     
end