1


0

カスタムユーザーセッション

私は、ユーザーセッションシステムを削ぎ落とし、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 Answer


2


通常は、UserSessionの状態(属性、モデルを介した認証の処理など)を管理し、アプリからのセッションを使用する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)も役立ちます。 基本的に、UserSessionを使用すると、form_forおよび同様のヘルパーを使用して、認証戦略ホルダーとして機能できます(実装時)。

これがあなたが始めるのに役立つことを願っています:)