代码之家  ›  专栏  ›  技术社区  ›  Karl

自定义用户会话

  •  1
  • Karl  · 技术社区  · 15 年前

    我正在尝试创建一个精简的用户会话系统,并尝试将其建模为类似于AuthLogic。

    class UserSession
      attr_accessor :username
    
      def initialize(params={})
        @username = params[:username]
      end
    
      def new_record?
        true
      end
    
      def self.find
        return nil if session[:username].nil?
        UserSession.new session[:username]
      end
    
      def save
        session[:username] = username
        session[:username] == username
      end
    
      def user
        User.find :first, :conditions => { :username => username }
      end
    
      def destroy
        session[:username] = nil
      end
    end
    

    我知道没有密码或任何东西,但我们暂时把它放在一边。我的问题是显然从一个模型访问会话既不容易又不好。这让我想知道,如果我不能访问会话,我应该如何准确地将创建用户会话抽象为模型?

    1 回复  |  直到 14 年前
        1
  •  2
  •   derekerdmann    14 年前

    通常我要做的是创建一个sessionsController,它管理用户会话的状态(属性、通过模型处理身份验证等),并使用来自应用程序的会话:

    class SessionsController < ApplicationController
    
      def new; UserSession.new; end
    
      def create
         @user_session = UserSession.new(params)
         if id = @user_session.user
           session[:current_user] = id
           redirect_to session[:last_url]
         else
           session[:current_user] = nil
           render :action => new
         end
      end
    
    end
    
    def destroy
      session[:current_user] = nil
      redirect_to root_path
    end
    

    帮手 def current_user; session[:current_user]; end )也有帮助。基本上,用户会话允许您为类似的帮助者使用Form_,并充当身份验证策略持有者(当您实现时)。

    希望这可以帮助您开始:)