2010-10-20 3 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 

A хелпер (def current_user; session[:current_user]; end) также может помочь. В основном UserSession позволяет использовать form_for и аналогичные помощники и выступать в роли держателя стратегии аутентификации (при реализации).

Надеется, что это может помочь вам начать работу :)

+0

Это похоже на то, что я в конечном итоге изменить его тоже, и она работает достаточно хорошо; на данный момент мне просто любопытно, как Authlogic справляется с этим, так как не похоже, что они устанавливают какую-либо логику в контроллере. – Karl

Смежные вопросы