Работа с куки вне контроллера - PullRequest
1 голос
/ 10 января 2011

Я хочу сделать простую аутентификацию, такую ​​как

# SessionController
require 'session.rb'
def create
  Session.new(params[:email], params[:password])
end

# lib/session.rb
class Session
  def initialize(email, password)
    client = Client.find_by_email_and_password(email, password)
    cookies[:user_id] = client.id if client
  end
end

, единственная проблема здесь в том, что я не могу использовать куки или сеансы вне контроллера.Я могу заменить настройку файлов cookie в контроллере, но это не то, что я хочу:)

Вопрос в том, как использовать файлы cookie вне контроллера и каковы лучшие практики.

1 Ответ

1 голос
/ 10 января 2011

Во-первых, не добавляйте явно ".rb" в оператор require.Вы бы просто использовали require 'session' как обычно.Во-вторых, Rails загрузит его для вас, когда вы ссылаетесь на Session, поэтому вам не нужно явно указывать это.Также, client ? cookies[:user_id] = client.id является недействительным кодом Ruby.Возможно, вы захотите cookies[:user_id] = client.id if client.

Очевидным решением было бы просто передать объект cookies в Session, который вы создаете, но я бы порекомендовал просто поместить код в контроллер.Почему у вас Session объект в первую очередь?Я бы порекомендовал не усложнять вещи, создав ненужный класс.

Обновление:

Чтобы проиллюстрировать мой последний комментарий, вот пример кода:

class Session
  attr_reader :controller

  def initialize(controller)
    @controller = controller
  end

  def client
    if controller.cookies[:user_id]
      return Client.find_by_id(controller.cookies[:user_id])
    elsif (email = controller.params[:email]) && (password = controller.params[:password])
      client = Client.find_by_email_and_password(email, password)
      controller.cookies[:user_id] = client.id if client
      return client
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...