2014-01-15 4 views
0

내 응용 프로그램에서 사용자는 다른 사용자를 자신의 계정에서 '기여자'로 초대 할 수 있습니다. 이 참여자는 일단 로그인하면 로그인 할 수있는 각 계정을 보여주는 대시 보드로 리디렉션됩니다.Rails : Devise 다른 사용자의 문제로 로그인

아래는 제공자 및 학교 관리자가 선수 계정에 로그인 할 수있게하는 데 사용되는 컨트롤러입니다. 원래 사용자가 계정에 로그인하면 앱이 session[:original_user_id] 변수를 확인하여 관리자가 계정에 다시 로그인 할 수 있도록 링크가있는 화면 상단에 메시지 배너를 표시합니다. 이는 내가 시도하는 데 문제가있는 것입니다 원래 사용자가 다시 로그인하는 방법을 알아낼

SignInAsController :.

class SignInAsController < ApplicationController 
    before_filter :authenticate_user! 

    include SchoolAdmin::Athletes 

    def create 
    session[:original_user_id] = if (current_user.school_admin? || current_user.athlete_contributor?) 
     current_user.id 
    else 
     nil 
    end 

    user = User.find(params[:id]) 

    if current_user.can_manage?(user) 
     sign_out(User.find(current_user.id)) 
     handle_request(athlete) 
     redirect_to user_root_path 
    else 
     redirect_to :back, notice: "You do not have access to that account" 
    end 
    end 

    private 

    def handle_request(athlete) 
     sign_in(:user, athlete, { bypass: true }) 
    end 
end 

UserModel의 can_manage를? 방법 :

class User < ActiveRecord::Base 
    #other methods 

    def can_manage?(user) 
    if athlete_contributor? 
     managed_athletes.include?(user) 
    elsif school_admin? 
     active_subscription.athletes.include?(user) 
    end 

    false 
    end 
end 

답변

0

유증은 로깅 된 과정을 고려


세션

에 대한 creating 당신이 유증에 대한 & 재정의 다양한 방법을 만들 수 sessions & registrations 컨트롤러를 가지고 세션, 내 자신의 방법을 구현하는 모습을 destroy 현재 sessio N & create과 같이 관리 통계로 새로운 하나 :

#config/routes.rb 
devise_for :users, :controllers => { :sessions => "sessions" } 
devise_scope :user do 
    post "admin", :to => "devise/sessions#admin_switch" 
end 

#app/controllers/sessions_controller.rb 
class SessionsController < Devise::SessionsController 

    #Switch to "admin" mode 
    def admin_switch 
      sign_out #method to destroy current user's session 
      sign_in #create new session -- needs more work 
    end 

end 

이것은 당신이 당신의 목표를 달성하는 것입니다 방법을 설명하기위한 것입니다. 내가 더 많은 코드를 추가하기를 원한다면, 확실히 내 게시물을 수정할 것입니다! , 정리 : 특히, 작동하지 않습니다 sign_in 명령 (에 전달 특정 데이터를 필요로하고 소장을 사용)

0

당신은 Switch User 작업 할 수 있습니다 보석 사용할 수 있습니다 고안 : authlogic을 restful_authentication 나 : 마법을

0

이것은 나를 위해 일한 것입니다. 관리자는 다른 사용자로 로그인 할 수 있습니다.

class AdminController < ApplicationController 
    before_filter :authenticate_user! 

    def become 
    return unless current_user.is_an_admin? 
    sign_in(:user, User.find(params[:id])) 
    redirect_to root_path 
    end 
end 

관리자는 사용자가되면 당신이 last_sign_in_atcurrent_sign_in를 업데이트하지 않는 경우도 sign_in(:user, User.find(params[:id]), { :bypass => true }) 할 수 있습니다.

관련 문제