【发布时间】:2016-06-15 05:18:50
【问题描述】:
我正在使用 rails3 和 gem devise,我有两个角色 admin 和 customer,我想要在用户之后
退出管理员应该重定向到不同的路径,客户应该重定向到不同的路径
退出时..
【问题讨论】:
标签: ruby-on-rails devise
我正在使用 rails3 和 gem devise,我有两个角色 admin 和 customer,我想要在用户之后
退出管理员应该重定向到不同的路径,客户应该重定向到不同的路径
退出时..
【问题讨论】:
标签: ruby-on-rails devise
你可以在sign_out路径后使用devise方法获得你想要的功能。
但在您在应用程序助手中定义这些方法之前。
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
结束
希望一切顺利!!!
【讨论】:
您可以覆盖设计使用的 after_sign_out_path_for(resource) 方法。在检查方法中用户的角色后,只需提及逻辑或仅提及所需的重定向路径。设计会话的销毁动作通过该方法调用重定向路径。
def after_sign_out_path_for(resource)
#logic
end
希望这有帮助..
【讨论】:
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
【讨论】: