【发布时间】:2014-02-03 09:44:00
【问题描述】:
在我正在开发的 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
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 devise warden