在我正在开发的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