ruby-on-rails – 使用authlogic登录时为current_user调用方法

我在rails应用程序中使用authlogic进行身份验证.我需要能够在登录时为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

我在这里看到了类似的问题Not able to set a current_user using Authlogic on Rails 3.0.1其中答案是禁用basic_auth,但我在app的管理员端使用basic_auth,所以我不能简单地禁用它.

>为什么我不能在这里调用current_user?
>如果我不能在这里调用current_user,有没有办法设置它?

最佳答案 在我自己的应用程序中,我有这两个方法(以及其他)在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方法返回正确的用户.

点赞