Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails cancan/设计-重定向到请求的路径_Ruby On Rails - Fatal编程技术网

Ruby on rails cancan/设计-重定向到请求的路径

Ruby on rails cancan/设计-重定向到请求的路径,ruby-on-rails,Ruby On Rails,当用户访问他们无权查看的页面时,他们会被重定向到登录页面。登录后,它们将被重定向到站点根目录。有没有一种简单快捷的方法可以将他们重定向回他们最初要求的页面?我不明白你到底想要实现什么,你可以说“如果用户访问了一个他们无权查看的页面,他们会被重定向到登录页面。登录后,他们会被重定向到网站根目录” 我假设会有两组用户,一个是管理员用户,另一个是非管理员用户,我处理这个问题的方式是这样的 内部应用程序控制器 class ApplicationController < ActionControll

当用户访问他们无权查看的页面时,他们会被重定向到登录页面。登录后,它们将被重定向到站点根目录。有没有一种简单快捷的方法可以将他们重定向回他们最初要求的页面?

我不明白你到底想要实现什么,你可以说“如果用户访问了一个他们无权查看的页面,他们会被重定向到登录页面。登录后,他们会被重定向到网站根目录”

我假设会有两组用户,一个是管理员用户,另一个是非管理员用户,我处理这个问题的方式是这样的

内部应用程序控制器

class ApplicationController < ActionController::Base
  protect_from_forgery

  check_authorization :unless => :devise_controller?
  before_filter :authenticate_user! 

  rescue_from CanCan::AccessDenied do |exception|
    redirect_to root_url, :alert => exception.message
  end

  protected

  def stored_location_for(resource_or_scope)
    nil
  end

  def after_sign_in_path_for(resource_or_scope)
    if current_user.admin?
      #add your desired path
    else
      #redirect to your desired path
    end
  end
end
class ApplicationController:设计\u控制器?
过滤前:验证用户身份!
从CanCan解救|u::拒绝访问do |异常|
将\重定向到根\ url,:alert=>exception.message
结束
受保护的
def存储位置(资源或范围)
无
结束
在路径中签名后定义(资源或范围)
如果是当前的_user.admin?
#添加所需路径
其他的
#重定向到所需路径
结束
结束
结束

我不明白你到底想通过说“如果用户访问一个他们无权查看的页面,他们会被重定向到登录页面。登录后,他们会被重定向到网站根目录”来实现什么

我假设会有两组用户,一个是管理员用户,另一个是非管理员用户,我处理这个问题的方式是这样的

内部应用程序控制器

class ApplicationController < ActionController::Base
  protect_from_forgery

  check_authorization :unless => :devise_controller?
  before_filter :authenticate_user! 

  rescue_from CanCan::AccessDenied do |exception|
    redirect_to root_url, :alert => exception.message
  end

  protected

  def stored_location_for(resource_or_scope)
    nil
  end

  def after_sign_in_path_for(resource_or_scope)
    if current_user.admin?
      #add your desired path
    else
      #redirect to your desired path
    end
  end
end
class ApplicationController:设计\u控制器?
过滤前:验证用户身份!
从CanCan解救|u::拒绝访问do |异常|
将\重定向到根\ url,:alert=>exception.message
结束
受保护的
def存储位置(资源或范围)
无
结束
在路径中签名后定义(资源或范围)
如果是当前的_user.admin?
#添加所需路径
其他的
#重定向到所需路径
结束
结束
结束

您可以将一个隐藏字段
引用页面
添加到您的
登录
-表单中,将
先前的
引用者添加到该字段,并在其存在时路由回该字段,如下所示:

def after_sign_in_path_for(resource)
  params[:referring_page] || super
end

这是一个手动解决方案,但我更喜欢在控制器端使用复杂的逻辑。

您可以在
表单中添加一个隐藏字段
引用页面
,将
引用添加到该字段,并在其存在时返回该字段,如下所示:

def after_sign_in_path_for(resource)
  params[:referring_page] || super
end
这是一个手动解决方案,但我更喜欢在控制器端使用复杂的逻辑