无法理解Devise Strategies的工作原理

时间:2014-01-15 03:36:37

标签: ruby-on-rails ruby ruby-on-rails-3 devise warden

在我正在开发的Rails应用程序中,需要一个自定义设计策略,该策略将以另一个用户身份登录管理员,并允许该管理员轻松重新登录。

我搜索了谷歌搜索结果,但没有任何真正显示您必须使用自定义策略。

这是我的策略:(config / sign_in_as.rb)

require 'devise/strategies/authenticatable'

module Devise
  module Strategies
    class SignInAs < Authenticatable

      def valid?
        user = User.find_by_id(params[:id])
        user && has_contributor_access? && current_user.can_manage?(user)
      end

      def authenticate!
        resource = User.find_by_id params[:id]

        if resource
          success!(resource)
        else
          fail!("Error")
        end
      end

      private
        def has_contributor_access?
          current_user.school_admin? || current_user.athlete_contributor?
        end
    end
  end
end

Warden::Strategies.add(:sign_in_as, Devise::Strategies::SignInAs)

SignInAsController:

class SignInAsController < ApplicationController
  before_filter :authenticate_user!

  def create
    sign_out(current_user)
    # How to incorporate custom strategy?
    sign_in(:user)
    redirect_to user_root_path
  end
end

1 个答案:

答案 0 :(得分:0)

请浏览此gem user_impersonate here。它使用你想要的相同策略。