4

authlogicRailsアプリで認証に使用しています。サインイン時に current_user のメソッドを呼び出せるようにする必要がありますが、nil が返されます。

私の user_sessions_controller.rb で

def create
  @user_session = UserSession.new(params[:user_session])

  if @user_session.save
    current_user.increment_login_count_for_current_memberships!
    flash[:notice] = 'Sign in successful.'
    redirect_to root_path
  else
    render action: "new"
  end
end

そして、それは戻ってきます...

Failure/Error: click_button "Sign in"
     NoMethodError:
       undefined method `increment_login_count_for_current_memberships!' for nil:NilClass

私はここで同様の問題を見てきました.Nant able to set a current_user using Authlogic on Rails 3.0.1 where the answer is to disable でしたが、私はアプリの管理者側にbasic_auth使用しているため、単純に無効にすることはできません.basic_auth

  • current_userここに電話できないのはなぜですか?

  • ここで電話できない場合current_user、設定する方法はありますか?

4

2 に答える 2

2

私自身のアプリでは、次の 2 つのメソッドを (とりわけ) で定義しlib/authlogic_helper.rbています (あなたもそうしていると思います):

module AuthlogicHelper
  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

これらのメソッドは、コントローラーコード@current_user_sessionの代わりにユーザーセッションインスタンス変数が呼び出されることを除いて、回答のコードとまったく同じように動作するようです。@user_session

@current_user_sessionコントローラー アクションでユーザー セッション変数の名前を に変更すると、current_user_sessionメソッドは短絡して作成したばかりのセッションを返します。これにより、current_userメソッドは正しいユーザーを返すことができます。

于 2012-04-18T11:54:48.183 に答える
1

なぜここに電話できないのか、まだわかりませcurrent_user@current_user。しかし、コントローラーコードで current_user を呼び出す方法が 2 つ見つかりました...

UserSession.find.user.increment_login_count_for_current_memberships!

@user_session.user.increment_login_count_for_current_memberships!

誰かが私がcurrent_userここに電話できない理由を明らかにしたい場合は、喜んで賞金を授与します :)

于 2012-04-13T07:12:24.647 に答える