Создание пользовательской сессии в Authlogic на лету - PullRequest
1 голос
/ 10 июня 2010

Мы используем 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 Ответ

2 голосов
/ 10 июня 2010

Разобрался. Мне нужно было обновить информацию о сеансе следующим образом:

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

в require_user_or_create_anonymous.

...