2010-10-20 125 views
1

我試圖做一個精簡的用戶會話系統,並試圖建模它與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 

我知道這裏沒有密碼或任何東西,但讓我們暫且放在一邊。我的問題是,顯然從模型訪問會話並不容易,而且形式也不好。這導致我想知道,如果我無法訪問會話,我該如何將創建用戶會話抽象爲模型?

回答

2

通常我會做的就是創建一個SessionsController,管理該UserSession的狀態(屬性,處理通過模型等認證),並使用從應用程序會話:

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)也可以提供幫助。基本上,UserSession允許您使用form_for和類似的幫助程序,並充當身份驗證策略持有者(實施時)。

希望這可以幫助你開始:)

+0

這與我最終改變它的方式類似,它的工作原理相當好;在這一點上,我只是好奇Authlogic是如何實現它的,因爲它看起來並不像是在控制器中放置任何邏輯。 – Karl 2010-10-20 18:55:47