0

起動情報:

  • 私のシステムは、適切なアカウントを取得するためにサブドメインを使用しません!
  • 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 のドキュメントには、scope_cookies を使用した authenticates_many を使用しない通常の実装のみが示されています。

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を見てください。

注: ビューを確認することもできます...さらにインスピレーションを得るために。

これにより、ユーザーを認証し、そのセッションを管理できます。ログインしたら、彼のアカウントを取得できる必要があるため、アカウントごとに他のリクエストをスコープできます。

これを実現するには、application_controller.rb に以下を追加して current_account helper_method を追加します。

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 に答える