0

启动信息:

  • 我的系统不使用子域来获取正确的帐户!
  • 我使用 Rails 3.0.x
  • 我使用 authlogic 2.1.6
  • 模型帐户和模型用户
  • cookie 以名称存在,例如 account_1_user_credentials,没错!

模型账户.rb

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

模型用户.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 的实现)看起来如何?

4

1 回答 1

2

如果您的所有用户都获得相同的登录名,则您需要根据 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。

于 2011-02-01T15:33:08.100 回答