我正在使用rails3和gem devise,我有两个角色admin和customer,我想要用户
退出管理员应该重定向到不同的路径,客户应该重定向到不同的路径
退出时..
答案 0 :(得分:3)
您可以在sign_out路径后使用设计方法获得所需的功能。
但在应用程序助手中定义这些方法之前。
def is_admin?(user)
admin_role = Role.find(:first, :conditions => ["name = ?", "admin"])
return user.roles.include?(admin_role)
end
def is_customer?(user)
admin_role = Role.find(:first, :conditions => ["name = ?", "customer"])
return user.roles.include?(admin_role)
end
之后在应用程序控制器中包含应用程序帮助程序并定义此方法
def after_sign_out_path_for(resource_or_scope)
if is_admin?(current_user)
home_path = "/admin/users/sign_in"
elsif is_customer?(current_user)
home_path = "/customer"
end
respond_to?(home_path, true) ? send(root_path) : home_path
端
希望它能正常工作!!!
答案 1 :(得分:2)
您可以覆盖设计使用的 after_sign_out_path_for(资源)方法。在检查用户在方法中的角色后,只需提及逻辑或仅提供所需的重定向路径。设计会话的销毁操作通过此方法调用重定向路径。
def after_sign_out_path_for(resource)
#logic
end
希望这有用..
答案 2 :(得分:0)
Devise README介绍了如何设置自定义路由和控制器。简而言之,您需要为每个型号定制路线,例如:
devise_for :admins, :controllers => { :sessions => "admins/sessions" }
devise_for :customers, :controllers => { :sessions => "customers/sessions" }
然后创建相应的控制器并覆盖Devise::SessionsController#destroy
,例如:
class Admins::SessionsController < Devise::SessionsController
def destroy
super
redirect_to ...
end
end