2010-03-03 1 views
1

현재 레일즈에 웹 애플리케이션을 구축 중입니다. Authlogic을 사용하여 정상적인 인증을 처리하고 있습니다. 나는 facebooker를 사용하여 외부 사이트에서 facebook 연결을 처리하고 facebook canvas 응용 프로그램 내에서 사용자를 인증합니다.레일즈 - Authlogic 및 Facebook App - Coherent Current_User

간단하고 일관된 current_user 기능을 만드는 데 문제가 있습니다. 현재 나는 여러 가지 방법으로 현재 사용자를 얻거나 설정하는 데 혼란을 겪고 있습니다. 가능한 한이 작업을 단순화하고 싶습니다.

class ApplicationController < ActionController::Base 

    helper :all # include all helpers, all the time 
    protect_from_forgery # See ActionController::RequestForgeryProtection for details 
    filter_parameter_logging :fb_sig_friends, :password, :password_confirmation 
    helper_method :facebook_session, :current_user_session, :current_user 

    before_filter :fb_setup 

    attr_accessor :current_user 
    helper_attr :current_user 


    #Before filter to decide if we should use facebook sessions to set current user    

    def fb_setup 
    if request_comes_from_facebook? 
     ensure_authenticated_to_facebook 
     set_current_fb_user 
    end 
    end 

    ############ 
    # AuthLogic 
    ############ 
def current_user_session 
     return @current_user_session if defined?(@current_user_session) 
     @current_user_session = UserSession.find 
end 

def current_user 
     return @current_user if defined?(@current_user) 
     @current_user = current_user_session && current_user_session.user 
end 

########## 
# Facebook 
########## 
def create_user 
self.current_user = User.for(facebook_session.user.to_i, facebook_session) 
end 

def set_current_fb_user 
self.current_user = User.for(facebook_session.user.to_i, facebook_session) 
end 

end 

그리고 내 사용자 모델에서

, 내가 찾는 데 도움이 방법이/사용자를 생성 : 나는 여기 (environment.rb에 정의) 내 세션에 대한 active_record_store 을 사용하고

내 응용 프로그램 컨트롤러입니다 페이스 북에서 ID : def self.for (facebook_id, facebook_session = nil) 돌아 오는 find_or_create_by_facebook_id (facebook_id) do 사용자 | facebook_session.nil? user.store_session (facebook_session.session_key) 끝 끝 끝이 혼란 무엇

def store_session(session_key) 
    if self.session_key != session_key 
    update_attribute(:session_key,session_key) 
    end 
end 

def facebook_session 
    @facebook_session ||= 
    returning Facebooker::Session.create do |session| 
    session.secure_with!(session_key,facebook_id,1.day.from_now) 
    end 
end 

는 그 authlogic의 방법에만 CURRENT_USER이 필요할 때 호출되는,하지만 페이스 북의 set_current_fb_user는 모든 요청하기 전에 호출된다.

current_user 설정을 담당하는 세션에 상관없이 일관된 방식으로 application_controller에 설정된 self.current_user 또는 @current_user가 필요합니다. 이 작업을 수행하는 데 문제가 있으며 나머지 코드베이스는이 때문에 고통을 겪고 있습니다. 누구든지 조언을한다면, 크게 감사하겠습니다.

추가 정보가 필요하면 알려 주시면 기꺼이 안내해 드리겠습니다.

감사

답변

0

set_current_fb_user 방법이 fb_setup에서 호출되기 때문에 ApplicationControllerbefore_filter되는 모든 요청에 ​​따라 전화 (모든 컨트롤러는 ApplicationController에서 상속)입니다. 그러나 항상 current_user을 호출하는 before_filter 메서드가 없습니다. 그래서,에 before_filter 라인을 변경하려고 : set_current_fb_user false 값을 반환하는 경우, 다음 current_user가 호출되지 않습니다

before_filter [:set_current_fb_user, :current_user] 

참고.

자세한 내용은 Rails Action Controller Guide을 참조하십시오.