自定义用户会话

时间:2010-10-20 01:41:01

标签: ruby-on-rails authentication

我正在尝试创建一个精简的用户会话系统,并尝试将其建模为类似于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 个答案:

答案 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和类似的帮助程序,并充当身份验证策略持有者(当您实现时)。

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