在Authlogic中动态创建UserSession

时间:2010-06-09 20:51:46

标签: ruby-on-rails session authlogic

我们正在使用authlogic,我们希望创建一个用户帐户,并且用户在访问某些页面时即时登录。我们有一个函数,我们在我们希望用户动态创建的操作中作为before_filter运行:

   #
   # Require user account, create an anonymous if no account
   #
   def require_user_or_create_anonymous
        unless current_user
          @user = User.new
          @user.name = 'Anonymous'
          @user.anonymous = 1
          @user.crypted_password = ''
          @user.password_salt = ''
          @user.persistence_token = ''
          @user.email = 'email'
          @user.save false
          @user_session = UserSession.new
        end
  end
  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

这可以创建用户并将用户登录。但是我们发现它需要另一个页面加载才能激活它。如果在before_filter中为特定操作调用此方法,则current_user方法仅在该操作中返回nil。如果然后重新加载页面,current_user将正确返回用户对象。

知道怎么解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

想出来。我需要用以下内容更新会话信息:

  @current_user_session = UserSession.find
  @current_user = current_user_session && current_user_session.record

在require_user_or_create_anonymous。