【问题标题】:How i can redirect to different signout paths using Rails and Devise我如何使用 Rails 和 Devise 重定向到不同的登出路径
【发布时间】:2016-06-15 05:18:50
【问题描述】:

我正在使用 rails3 和 gem devise,我有两个角色 admin 和 customer,我想要在用户之后

退出管理员应该重定向到不同的路径,客户应该重定向到不同的路径

退出时..

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    你可以在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
    

    结束

    希望一切顺利!!!

    【讨论】:

      【解决方案2】:

      您可以覆盖设计使用的 after_sign_out_path_for(resource) 方法。在检查方法中用户的角色后,只需提及逻辑或仅提及所需的重定向路径。设计会话的销毁动作通过该方法调用重定向路径。

      def after_sign_out_path_for(resource)
        #logic
      end
      

      希望这有帮助..

      【讨论】:

        【解决方案3】:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多