我正在尝试创建一个精简的用户会话系统,并尝试将其建模为类似于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
我知道没有密码或任何东西,但让我们暂时把它放在一边。我的问题是,显然从模型访问会话并不容易。这让我想知道,如果我无法访问会话,我应该如何抽象创建用户会话作为模型?
答案 0 :(得分: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和类似的帮助程序,并充当身份验证策略持有者(当您实现时)。
希望这可以帮助您开始:)