Rails3, Authlogic и authenticates_many КАК кодировать вспомогательный метод current_account_session? - PullRequest
0 голосов
/ 01 февраля 2011

Информация о запуске:

  • В моей системе нет пользовательских поддоменов, чтобы получить правильный аккаунт!
  • Я использую Rails 3.0.x
  • Я использую Authlogic 2.1.6
  • Модель Учетная запись и модель Пользователя
  • Файл cookie присутствует с именем, например, account_1_user_credentials и это правильно!

Модель Account.rb

class Account < ActiveRecord::Base
  authenticates_many :user_sessions, :scope_cookies => true
  has_many :users
end

Модель User.rb

class User < ActiveRecord::Base
  acts_as_authentic do |c|
    c.validations_scope = :account_id
  end
  belongs_to :account
  ...
end

ВОПРОС: Как я могу написать вспомогательные методы приложения?

Документация Authlogic показывает только нормальную реализацию без authenticates_many с scope_cookies:

class ApplicationController
  helper_method :current_user_session, :current_user

  private
    def current_user_session
      return @current_user_session if defined?(@current_user_session)
      @current_user_session = UserSession.find
    end

    def current_user
      return @current_user if defined?(@current_user)
      @current_user = current_user_session && current_user_session.user
    end
 end

НО как session_controller.rb (установка current_account_session) и application_controller.rb (реализация def current_account_session ... end) выглядит?

1 Ответ

2 голосов
/ 01 февраля 2011

Если все ваши пользователи получают одинаковый вход, вам нужно будет найти аккаунт на основе current_user. Для этого вам не нужно использовать authenticates_many в аккаунтах. Просто аутентифицируйте своего пользователя, затем получите его учетную запись.

Чтобы настроить контроллер, посмотрите на пример https://github.com/binarylogic/authlogic_example/blob/master/app/controllers/user_sessions_controller.rb

Примечание: Вы также можете проверить виды, ... для большего вдохновения.

Это позволит вам аутентифицировать пользователя и управлять его сеансом. После входа в систему вы должны иметь возможность получить его учетную запись, чтобы вы могли выполнять другие запросы для каждой учетной записи.

Чтобы добиться этого, добавьте current_account helper_method, добавив следующее в ваш application_controller.rb

class ApplicationController
  helper_method :current_account

  private

    def current_account
      current_user.account
    end
    memoize :current_account
end

Не забудьте также добавить значения по умолчанию current_user и current_user_session helper_method.

Таким образом, вы всегда можете найти current_account аутентифицированного пользователя во всех ваших контроллерах.

...