2009-11-12 8 views

Répondre

0

Je n'ai pas eu à le faire moi-même, et je ne sais pas exactement pourquoi quelqu'un pourrait avoir besoin de faire cela.

En regardant à travers le code source, je peux voir qu'il pourrait y avoir un moyen de le faire.

Dans le module Authlogic :: Session :: Persistence, il existe une méthode de recherche. Vous pouvez appeler cette méthode en utilisant UserSession.find et il semble avoir la capacité de recherche basée sur id_session

# This is how you persist a session. This finds the record for the current session using 
    # a variety of methods. It basically tries to "log in" the user without the user having 
    # to explicitly log in. Check out the other Authlogic::Session modules for more information. 
    # 
    # The best way to use this method is something like: 
    # 
    # helper_method :current_user_session, :current_user 
    # 
    # 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 
    # 
    # Also, this method accepts a single parameter as the id, to find session that you marked with an id: 
    # 
    # UserSession.find(:secure) 
    # 
    # See the id method for more information on ids. 
    def find(id = nil, priority_record = nil) 
     session = new({:priority_record => priority_record}, id) 
     session.priority_record = priority_record 
     if session.persisting? 
     session 
     else 
     nil 
     end 
    end 
    end 

La documentation de cette méthode se réfère à la Authlogic :: classe Session.

Dans Authlogic :: Session :: Session :: Config, il est indiqué que la clé de session peut être une clé cookie, une chaîne ou un symbole.

module Config 
    # Works exactly like cookie_key, but for sessions. See cookie_key for more info. 
    # 
    # * <tt>Default:</tt> cookie_key 
    # * <tt>Accepts:</tt> Symbol or String 
    def session_key(value = nil) 
     rw_config(:session_key, value, cookie_key) 
    end 
    alias_method :session_key=, :session_key 
    end 

Ainsi, dans la méthode qui suit, qui essaie de trouver la session en cours, nous pouvons voir que si le record_id est non nul, alors il recherche la session à l'aide de cette clé.

 def persist_by_session 
     persistence_token, record_id = session_credentials 
     if !persistence_token.nil? 
      # Allow finding by persistence token, because when records are created the session is maintained in a before_save, when there is no id. 
      # This is done for performance reasons and to save on queries. 
      record = record_id.nil? ? 
      search_for_record("find_by_persistence_token", persistence_token) : 
      search_for_record("find_by_#{klass.primary_key}", record_id) 
      self.unauthorized_record = record if record && record.persistence_token == persistence_token 
      valid? 
     else 
      false 
     end 
     end 

L'ID d'enregistrement est créé avec la méthode session_credentials. Ce qui semble construire une clé de session en fonction de la clé fournie au contrôleur

 def session_credentials 
     [controller.session[session_key], controller.session["#{session_key}_#{klass.primary_key}"]].compact 
     end 

     def session_key 
     build_key(self.class.session_key) 
     end 

J'ai rassemblé plus de ce en naviguant à travers la source à Github. Si vous avez besoin de plus d'aide, c'est peut-être le meilleur endroit pour commencer à chercher.

Espérons que cela aide

Questions connexes