我如何使用Rails和Devise重定向到不同的注销路径
我正在使用rails3和gem devise,我有两个角色管理员和客户,我想要用户之后
注销管理员应该重定向到不同的路径,客户应该重定向到不同的路径
退出时……
您可以在sign_out路径后使用设计方法获得所需的function。
但在应用程序助手中定义这些方法之前。
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
- 设计authenticate_user
- 调用Rails.application.routes.generate()或Rails.application.routes.recognize_path()时出现’RuntimeError:route set not finalized’
- rails 3 – 一个应用程序,多个域,如何为其中一个域实现不同的“根”路由?
- Phonegap App使用身份validation与Rails 3 App进行通信
- 条带标记未附加到Rails App的请求主体
- delayed_job奇怪的例外
- 在切换要转换的Blacklight标签的区域设置后,需要刷新页面
- rake / rails .save! 没有更新数据库
- Rails设计自定义注册和登录同一页面问题