为每个控制器设计redirect_url

时间:2011-05-02 21:38:07

标签: ruby-on-rails devise

我想更改Devise在每个控制器上使用的redirect_url,即:

class DashboardController < ApplicationController
  before_filter :authenticate_user!
end

class Admin::BaseController < ApplicationController
  before_filter :authenticate_user!, :failure_url => admin_login_path
end

我不想更改管理员的授权方式。我不想创建Admin模型(devise_for:admin)或客户失败应用程序。除了在身份验证失败后的redirect_url之外,我希望跨控制器使用相同的功能。

所有输入都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我还没有对它进行测试,但似乎如果你在redirect_url中修补一个名为class Devise::FailureApp的受保护方法,并根据某些逻辑返回一个url,那么你可以重定向到其他网址。问题是,FailureApp与您的控制器完全分离,因此您必须使用某些东西来传递此信息,例如带控制器的单例 - &gt; failure_urls map。

答案 1 :(得分:0)

您是否考虑过使用CanCan来实现

rescue_from CanCan::AccessDenied do |exception|
  flash[:error] = exception.message
  redirect_to root_url
end

这是full example。这在CanCan Wiki中也有详细说明。祝你好运!