1

authlogic を使用してユーザーを認証します。私のコントローラーでは、次のように (文書化されているように) 定義された current_user を使用します。

  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.record
  end

また、declarative_authorization を使用して現在のユーザーの権限を管理しています。通常のランタイム シナリオではすべて正常に動作しますが、" get_with" などの要求ステートメントを使用する機能テストを作成すると、コントローラーの current_user が nil になります。declarative_authorization テスト ヘルパー コードを調べたところ、このシナリオでは、declarative_authorization gem が実際に現在のユーザーを Authorization.current_user (Thread.current["current_user"] から取得) に格納していることがわかりました。そのため、現在のユーザーがさまざまなシナリオでどのように処理されるかについて、かなりの混乱があるようです。

私の質問: 通常のランタイムとテスト シナリオの両方で current_user を見つける適切な方法は何ですか?

4

2 に答える 2

0

このような before_filter を application_controller で定義できます。

before_filter { |c| Authorization.current_user = c.current_user }

于 2010-07-29T11:38:50.170 に答える
0

アンジェラス、あなたは正しかった。get_with、post_with などを使用するべきではありません。これらは Authorization.current_user、session[:user]、session[:user_id] を設定するだけで、これらは authlogic では廃止されたようです。そして何らかの理由で、これらは UserSession を nil に設定することさえあり、それが問題を引き起こしていました。したがって、UserSession.create(users(:admin)) に続いて、通常の get や post などが実行されます。

于 2010-07-29T20:16:52.890 に答える