Пользовательские сеансы пользователя - PullRequest
1 голос
/ 20 октября 2010

Я пытаюсь создать урезанную систему пользовательских сессий и пытался смоделировать ее так, чтобы она была похожа на 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 Ответ

2 голосов
/ 20 октября 2010

Обычно я бы создал 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 и аналогичные помощники и выступать в качестве держателя стратегии аутентификации (при реализации).

Надеюсь, это поможет вам начать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...