我想更改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之外,我希望跨控制器使用相同的功能。
所有输入都将不胜感激。
答案 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中也有详细说明。祝你好运!