cancan / devise - 重定向到请求的路径

时间:2012-06-29 23:43:39

标签: ruby-on-rails

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

2 个答案:

答案 0 :(得分:3)

您可以在referring_page - 表单中添加隐藏字段sign_in,以便将former引荐来源添加到该字段,并在其存在的情况下返回到该字段,如下所示:

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

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

答案 1 :(得分:1)

我不明白你想要实现的目标是“如果用户访问他们无权查看的页面,他们会被重定向到登录页面。登录后,他们会被重定向到站点根目录”

我假设有两组用户,一组是admin-user,另一组是非管理员用户,我处理的方式就是这样,

内部应用程序控制器

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